Код: Выделить всё
...
tmpstr="update katbox set katbox.count="+AllInPallet+" where katbox.nrec=";
sstr4_1=tmpstr+#comp("+nreckatbox+")";
...
Модераторы: m0p3e, edward_K, Модераторы
Код: Выделить всё
...
tmpstr="update katbox set katbox.count="+AllInPallet+" where katbox.nrec=";
sstr4_1=tmpstr+#comp("+nreckatbox+")";
...
Та же ошибка ( см. выше)RAJAH писал(а):А если так?Код: Выделить всё
... tmpstr="update katbox set katbox.count="+AllInPallet+" where katbox.nrec="; sstr4_1=tmpstr+#comp("+nreckatbox+")"; ...
Галактика зарегистрировала это в ПИР.Den писал(а):Это баг быстрее всего.
Код: Выделить всё
CREATE OR REPLACE FUNCTION updtkatbox(NRECREC IN VARCHAR2, MAXC IN NUMBER)
RETURN INTEGER
IS
procedure UPDKATBOX_PR is
pragma autonomous_transaction;
begin
UPDATE VRN.KATBOX SET FCOUNT=MAXC WHERE FNREC=NRECREC;
COMMIT;
END;
begin
UPDKATBOX_pr;
return 1;
END;
Код: Выделить всё
sstr4_2='select updtkatbox(#comp('+nreckatbox+'),'+AllInPallet_Alg+') from dual';
Message(sstr4_2,0);
iHandle4_2 = DSQL_CreateHandle();
result4_2 = DSQL_RunQuery(iHandle4_2, sstr4_2);
DSQL_BindCol(iHandle4_2, 2, 'double');
iHandle4_2 =DSQL_DeleteHandle();
Функцию(процедуру) ж вроде средствами атлантиса надо создать.savov писал(а):Галактика зарегистрировала это в ПИР.Den писал(а):Это баг быстрее всего.
Но мне их ждать долго.
Попробовал обходной маневр.
В oracle написал функцию изменения поля:В Галактике пытаюсь сделать:Код: Выделить всё
CREATE OR REPLACE FUNCTION updtkatbox(NRECREC IN VARCHAR2, MAXC IN NUMBER) RETURN INTEGER IS procedure UPDKATBOX_PR is pragma autonomous_transaction; begin UPDATE VRN.KATBOX SET FCOUNT=MAXC WHERE FNREC=NRECREC; COMMIT; END; begin UPDKATBOX_pr; return 1; END;
Код: Выделить всё
sstr4_2='select updtkatbox(#comp('+nreckatbox+'),'+AllInPallet_Alg+') from dual'; Message(sstr4_2,0); iHandle4_2 = DSQL_CreateHandle(); result4_2 = DSQL_RunQuery(iHandle4_2, sstr4_2); DSQL_BindCol(iHandle4_2, 2, 'double'); iHandle4_2 =DSQL_DeleteHandle();
Но ничего не происходит, ошибок нет, но поле не изменяется.
Если такой же запрос сделать в TOAD, то все работает, поле меняется, т.е. функция updtkatbox вроде как пашет.
Что может быть не так ( все запускается из JS!)?
Код: Выделить всё
sql procedure updtkatbox(NRECREC : comp; MAXC :integer);
{
}
Код: Выделить всё
nSTMT := sqlAllocStmt;
sqlBindParam(nSTMT, 1, _1_3_all);
sqlPrepare(nSTMT,'GET_SSPIS2('''+DateToStr(date11,'YYYY-MM-DD')+''','''+DateToStr(date22,'YYYY-MM-DD')+''',0,0,0,?)');
sqlExecute(nSTMT);
Код: Выделить всё
28.08.2012 13:22:01 [SHEVTSOVVA]:
BEGIN GALNPK."S$GET_SSPIS2" ( '2012-01-01' , '2012-03-31' , 0 , 0 , 0 , :P1 ) ;END;
ORA-01843: not a valid month
ORA-06512: at "GALNPK.S$GET_SSPIS2", line 149
ORA-06512: at line 1
---Bind variable values---
:P1 0
--------------------------
Код: Выделить всё
DECLARE COL1 INTEGER;
BEGIN
GALNPK.S$GET_SSPIS2('2012-01-01','2012-03-31',0,0,0,COL1);
DBMS_OUTPUT.enable;
DBMS_OUTPUT.put_line('SSPIS = '||TO_CHAR(COL1));
END;
Код: Выделить всё
SSPIS = 876
Код: Выделить всё
SQL Function GetKontrByMaxNrec (): comp;
var
res : comp;
{
res:=(Select max(nrec) from katorg);
return res;
}
Interface test_call_fun;
create view
var c: comp;
stmt : longint;
;
handleevent
CmInit:{
sqlFreeStmt(stmt);
stmt := sqlAllocStmt;
sqlBindCol(stmt, 1, c);
SqlExecStmt(stmt,'select top 1 getKontrByMaxNrec () from abonents');
if sqlFetch(stmt) = tsOk
Message('c='+c);
}
end;
end.
А из support это не прокатит?spark писал(а):с помощью aSQL.exe запустить lot, в котором:
Я создавал процедуру из ASQL - проблем с запуском не возникло, cfg простейший, и по-моему он автоматически сгенерирован, например что там за пасворд указан не знаю, запрашивает имя и пароль при запуске:savov писал(а):Для oracle может подскажете как asql запустить?
Код: Выделить всё
[DataBase]
DataBaseName=GALNPK
DataBaseDriver=ORA90DRV.DLL
[SQLDriver]
SQLServer=GALNPK
FullLoginName=FALSE
[Login]
UserName=
Password=ХХХХХХХ
Попробовал, почему-то не получается, нет соединения с БД пишет.Шевцов Владимир писал(а):Я создавал процедуру из ASQL - проблем с запуском не возникло, cfg простейший, и по-моему он автоматически сгенерирован, например что там за пасворд указан не знаю, запрашивает имя и пароль при запуске:
Из саппорта можно, я так делал. Имя правильное, галактика должна с ней работать по имени UPKATBOX. S$ драйвер добавляет сам...savov писал(а):Попробовал, почему-то не получается, нет соединения с БД пишет.Шевцов Владимир писал(а):Я создавал процедуру из ASQL - проблем с запуском не возникло, cfg простейший, и по-моему он автоматически сгенерирован, например что там за пасворд указан не знаю, запрашивает имя и пароль при запуске:
А из обычного SQL в саппорте почему нельзя?
У меня из обычного суппорта создалась запись в X$RESOURCES, в базе создалась пустая функция, но имя у нее S$UPKATBOX, хотя задавал имя UPKATBOX.
Ораклом изменил ее код, но из Галактики все равно не работает.
Тогда я туплю или уж не знаю что.spark писал(а):Из саппорта можно, я так делал. Имя правильное, галактика должна с ней работать по имени UPKATBOX. S$ драйвер добавляет сам...
Код: Выделить всё
sql function upkatbox(NRECREC : comp; MAXC :integer): Integer;
{};
Код: Выделить всё
CREATE OR REPLACE FUNCTION "S$UPKATBOX"(NRECREC IN VARCHAR2, MAXC IN NUMBER) RETURN NUMBER IS
procedure UPDKATBOX_PR is
pragma autonomous_transaction;
begin
UPDATE VRN.KATBOX SET FCOUNT=MAXC WHERE FNREC=NRECREC;
COMMIT;
END;
BEGIN
UPDKATBOX_PR;
RETURN 1;
END;
Код: Выделить всё
//вставляем максимальное число по палетте в каталог инфраструктуры склада
sstr4_2='select UPKATBOX(#comp('+nreckatbox+'),'+AllInPallet_Alg+') from dual';
iHandle4_2 = DSQL_CreateHandle();
result4_2 = DSQL_RunQuery(iHandle4_2, sstr4_2);
DSQL_BindCol(iHandle4_2, 1, 'double');
Message(DSQL_GetFieldValueByNum(1));
iHandle4_2 =DSQL_DeleteHandle();
Спасибо за подсказку. Ошибка, которая у меня была оказалась несвязана с выходными/входными параметрами процедуры. Проблема была в том что при запуске хранимки из галактики дата предаваемая в функцию TO_ATLDATE в виде строки не переводилась корректно в DATETIME. Из-под ораклового клиента всё работало. Добавление явного преобразования помогло.Den писал(а):Вообще вызов скалярной функции в dsql для получения просто какого то значения обратно "со своими прибабахами" ))
Нет возможности сейчас потестить на оракле, но под мсскуль работает вот так(по идее и под оракла должно тоже) на простом примере:
Отличительной особенностью является, как я понял, наличие в запросе top 1 +секция from...причем по барабану из какой таблицы )) Иначе выкидывает в ошибку такой запрос Атлантис.
Что касается Вашего случая, то не уверен что можно вызывать процедуры с параметром out из dsql. по крайней мере в доке как кто об этом не сказано.
Попробуйте оформить Вашу процедуру в функцию с параметрами может...
Код: Выделить всё
03.09.2012 12:24:26 [SHEVTSOVVA]:
Ошибка (1,65): Синтаксическая ошибка в SQL запросе "."
03.09.2012 12:26:08 [SHEVTSOVVA]:
Select GET_SSPIS('2012-01-01','2012-03-31',0,0,0) from SYS.DUAL