Прямой SQL

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Den
Местный житель
Сообщения: 1842
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Re: Прямой SQL

Сообщение Den »

RAJAH , скиньте сюда тогда полный текст процедуры и вызова ее ...ну или на почту намыльте ..попробую у себя
RAJAH
Местный житель
Сообщения: 932
Зарегистрирован: 18 фев 2008, 12:49

Re: Прямой SQL

Сообщение RAJAH »

Пытался описать процедуру на DSQL (sql procedure ...): при компиляции рантаймит.
Den
Местный житель
Сообщения: 1842
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Re: Прямой SQL

Сообщение Den »

RAJAH писал(а):Пытался описать процедуру на DSQL (sql procedure ...): при компиляции рантаймит.
см личку...
RAJAH
Местный житель
Сообщения: 932
Зарегистрирован: 18 фев 2008, 12:49

Re: Прямой SQL

Сообщение RAJAH »

Да! Спасибо! Плюс в карму!
Сам не догадался SQLExecStmt на ошибку проверить.
RAJAH
Местный житель
Сообщения: 932
Зарегистрирован: 18 фев 2008, 12:49

Re: Прямой SQL

Сообщение RAJAH »

Ещё вопросик возник.
В документации написано:
В хранимых функциях и процедурах доступны глобальные переменные:

Код: Выделить всё

<global-variables> = #ROWCOUNT | #OK | #NOTFOUND
Как правильно применить #ROWCOUNT к хранимке и узнать количество записей, которое она возвратила?
RAJAH
Местный житель
Сообщения: 932
Зарегистрирован: 18 фев 2008, 12:49

Re: Прямой SQL

Сообщение RAJAH »

Ни у кого не получилось?
Den
Местный житель
Сообщения: 1842
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Re: Прямой SQL

Сообщение Den »

"#ROWCOUNT - количество записей в курсоре. Можно применять для получения количества записей в неявных курсорах."

Сам не пробал, но судя по описалову, это для того чтобы узнать скока записей в задекларированном курсоре в хранимке.
Если просто узнать кол-во записей по какому то условию то может Функцию лучше которая будет возвращать это количество ?
RAJAH
Местный житель
Сообщения: 932
Зарегистрирован: 18 фев 2008, 12:49

Re: Прямой SQL

Сообщение RAJAH »

Какую функцию? Да мне вообще без условий: просто, сколько записей вернулось.
Я-то сам в цикле считал (i:=i+1), но это, кажется, долго. :)
Den
Местный житель
Сообщения: 1842
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Re: Прямой SQL

Сообщение Den »

ну если записи получаете для дальнейшего использвания в коде vip, то почему нельзя считать во времянку (например sqlFetchInto) и посмотреть Recordsintable ?
Или Вы хотите получить это кол-во внутри же алгоритма объявленной Вами SQL Procedure ?
RAJAH
Местный житель
Сообщения: 932
Зарегистрирован: 18 фев 2008, 12:49

Re: Прямой SQL

Сообщение RAJAH »

Den писал(а):Recordsintable
Это, конечно, один из вариантов, но не уверен, что быстрее будет. К тому же часто сталкивался, что Recordsintable показывает число записей в какой-то из таблиц представления, а не в представлении.
Den
Местный житель
Сообщения: 1842
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Re: Прямой SQL

Сообщение Den »

Recordsintable всегда возвращал кол-во записей физически сколько в табле, а не с наложенными условиями в ЛОТ. По крайней мере, я не замечал косяков на эту тему.
Возможны варианты насчет считывания, но, как правило, делаю, сразу в temptable считывание, и потом уже с ней что нужно...
n0where
Местный житель
Сообщения: 499
Зарегистрирован: 30 дек 2010, 08:16

Re: Прямой SQL

Сообщение n0where »

Делал аналогично RAJAH
Та же ошибка. Да SQLExecStmt - выдаёт ошибку 30006 - но что с этим делать?

Процедуру создал через SQL.

Вопрос решён.
хороший программист — это человек, который переходя улицу с односторонним движением смотрит в обе стороны
savov
Местный житель
Сообщения: 589
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Воронеж ОАО Верофарм. Воронеж

Re: Прямой SQL

Сообщение savov »

Доброго времени суток!
Продолжая осваивать прямой скуль в js Галактики, потребовалось делать вставку и изменение данных в таблицах.
Суть в том, что надо по определенному алгоритму изменять данные о ячейках хранения.
Пытаюсь

Код: Выделить всё

sstr2='insert into saldobox set saldobox.cpodr=#comp('+nRecPodr+'), saldobox.cbox=#comp('+DSQL_GetFieldValueByNum(2)+'),';
          sstr2 = sstr2+'saldobox.cmc=#comp('+ManufSpec.MCnRec+'), saldobox.cparty=#comp('+Party.nRec+'), saldobox.kol=#double('+kolvo+')';
          iHandle2 = DSQL_CreateHandle();
          result = DSQL_RunQuery(iHandle2, sstr2);
          iHandle2 =DSQL_DeleteHandle();    
 sstr3='update tekbox where tekbox.cpodr=#comp('+nRecPodr+') and tekbox.cbox=#comp('+DSQL_GetFieldValueByNum(2)+')';
          sstr3 = sstr3+'set tekbox.empty=#double('+emp+')';
          iHandle3 = DSQL_CreateHandle();
          result = DSQL_RunQuery(iHandle3, sstr3);
          iHandle3 =DSQL_DeleteHandle();       
   
Во-первых, вылетаю по рантайму.
В логе Оракла имею

Код: Выделить всё

06.07.2012 11:08:55 [SAVINKOV]:
insert into saldobox set saldobox.cpodr=#comp(562949953761944), saldobox.cbox=#comp(562949953422678),saldobox.cmc=#comp(562949953435032), saldobox.cparty=#comp(562949953493236), saldobox.kol=#double(115000) 
 
06.07.2012 11:08:55 [SAVINKOV]:
Ошибка(1,21): Ожидалось : "SELECT" 
и далее, самое интересное:

Код: Выделить всё

06.07.2012 11:08:55 [SAVINKOV]:
update tekbox where tekbox.cpodr=#comp(562949953761944) and tekbox.cbox=#comp()set tekbox.empty=#double(1) 
 
06.07.2012 11:08:55 [SAVINKOV]:
Ошибка(1,14): Ожидалось : "SET" 
06.07.2012 11:08:55 [SAVINKOV]:
!ERROR: QUERY #comp(),spbox.kol=#double(115000),spbox.dopr=#date(2012/07/04) not foun 
 
06.07.2012 11:08:55 [SAVINKOV]:
Ошибка(2,1): Ожидался SQL оператор 
06.07.2012 11:09:01 [SAVINKOV]:

DECLARE ID VARCHAR2(40); BEGIN ID := VRN."GETUSERNREC" || VRN."GETSESSIONID"; DELETE FROM VRN."SYS#LOCKS" WHERE USERID = ID; END;
ORA-12571: TNS:packet writer failure

06.07.2012 11:09:01 [SAVINKOV]:

DELETE FROM VRN."X$ACTIVEUSERS" WHERE ROWID NOT IN (SELECT ADDRESS FROM VRN."SYS#LOCKS")
ORA-03114: not connected to ORACLE
Ну и сами запросы , как видно, при разборе ораклом получают статус ошибки.
Вопрос, а как собственно вносить записи и изменять данные в таблицах прямым sql но именно в JS?
Den
Местный житель
Сообщения: 1842
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Re: Прямой SQL

Сообщение Den »

Синтаксис update в dsql update ..set...where
Наверное из за этого на update ругается
savov
Местный житель
Сообщения: 589
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Воронеж ОАО Верофарм. Воронеж

Re: Прямой SQL

Сообщение savov »

Den писал(а):Синтаксис update в dsql update ..set...where
Наверное из за этого на update ругается
Пишу:

Код: Выделить всё

sstr3='update tekbox set empty=#double('+emp+') where cpodr=#comp('+nRecPodr+') and cbox=#comp('+nreckatbox+')';

          iHandle3 = DSQL_CreateHandle();
          result = DSQL_RunQuery(iHandle3, sstr3);
          iHandle3 =DSQL_DeleteHandle();     
Остальное закомметировал.
Имею в логе Оракла:

Код: Выделить всё

06.07.2012 13:04:12 [SAVINKOV]:
update tekbox set empty=#double(1) where cpodr=#comp(562949953761944) and cbox=#comp(562949953422678) 
 
06.07.2012 13:04:12 [SAVINKOV]:
Ошибка(1,24): Синтаксическая ошибка в выражении 
06.07.2012 13:04:13 [SAVINKOV]:

DECLARE ID VARCHAR2(40); BEGIN ID := VRN."GETUSERNREC" || VRN."GETSESSIONID"; DELETE FROM VRN."SYS#LOCKS" WHERE USERID = ID; END;
ORA-12571: TNS:packet writer failure

06.07.2012 13:04:13 [SAVINKOV]:

DELETE FROM VRN."X$ACTIVEUSERS" WHERE ROWID NOT IN (SELECT ADDRESS FROM VRN."SYS#LOCKS")
ORA-03114: not connected to ORACLE
и слет по рантайму
Ответить