Страница 8 из 19

Re: Прямой SQL

Добавлено: 12 май 2012, 14:12
Den
RAJAH , скиньте сюда тогда полный текст процедуры и вызова ее ...ну или на почту намыльте ..попробую у себя

Re: Прямой SQL

Добавлено: 12 май 2012, 15:36
RAJAH
Пытался описать процедуру на DSQL (sql procedure ...): при компиляции рантаймит.

Re: Прямой SQL

Добавлено: 12 май 2012, 15:38
Den
RAJAH писал(а):Пытался описать процедуру на DSQL (sql procedure ...): при компиляции рантаймит.
см личку...

Re: Прямой SQL

Добавлено: 12 май 2012, 15:57
RAJAH
Да! Спасибо! Плюс в карму!
Сам не догадался SQLExecStmt на ошибку проверить.

Re: Прямой SQL

Добавлено: 28 май 2012, 11:58
RAJAH
Ещё вопросик возник.
В документации написано:
В хранимых функциях и процедурах доступны глобальные переменные:

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

<global-variables> = #ROWCOUNT | #OK | #NOTFOUND
Как правильно применить #ROWCOUNT к хранимке и узнать количество записей, которое она возвратила?

Re: Прямой SQL

Добавлено: 31 май 2012, 12:12
RAJAH
Ни у кого не получилось?

Re: Прямой SQL

Добавлено: 31 май 2012, 13:55
Den
"#ROWCOUNT - количество записей в курсоре. Можно применять для получения количества записей в неявных курсорах."

Сам не пробал, но судя по описалову, это для того чтобы узнать скока записей в задекларированном курсоре в хранимке.
Если просто узнать кол-во записей по какому то условию то может Функцию лучше которая будет возвращать это количество ?

Re: Прямой SQL

Добавлено: 31 май 2012, 14:05
RAJAH
Какую функцию? Да мне вообще без условий: просто, сколько записей вернулось.
Я-то сам в цикле считал (i:=i+1), но это, кажется, долго. :)

Re: Прямой SQL

Добавлено: 31 май 2012, 14:18
Den
ну если записи получаете для дальнейшего использвания в коде vip, то почему нельзя считать во времянку (например sqlFetchInto) и посмотреть Recordsintable ?
Или Вы хотите получить это кол-во внутри же алгоритма объявленной Вами SQL Procedure ?

Re: Прямой SQL

Добавлено: 31 май 2012, 14:22
RAJAH
Den писал(а):Recordsintable
Это, конечно, один из вариантов, но не уверен, что быстрее будет. К тому же часто сталкивался, что Recordsintable показывает число записей в какой-то из таблиц представления, а не в представлении.

Re: Прямой SQL

Добавлено: 31 май 2012, 14:28
Den
Recordsintable всегда возвращал кол-во записей физически сколько в табле, а не с наложенными условиями в ЛОТ. По крайней мере, я не замечал косяков на эту тему.
Возможны варианты насчет считывания, но, как правило, делаю, сразу в temptable считывание, и потом уже с ней что нужно...

Re: Прямой SQL

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

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

Вопрос решён.

Re: Прямой SQL

Добавлено: 06 июл 2012, 13:57
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?

Re: Прямой SQL

Добавлено: 06 июл 2012, 14:17
Den
Синтаксис update в dsql update ..set...where
Наверное из за этого на update ругается

Re: Прямой SQL

Добавлено: 06 июл 2012, 15:08
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
и слет по рантайму