|
|
|
Глюк при Fetch-е OUT-переменных хранимой процедуры в 10.0
|
|||
|---|---|---|---|
|
#18+
СУБД Oracle 8i PB 10.0 - evaluation, только что скачал. 1. Есть хранимая процедура: procedure tmp_test_proc( parm1 OUT integer, parm2 OUT varchar2, parm3 OUT integer, parm4 OUT varchar2, parm5 OUT integer ) is BEGIN parm1 :=55; parm2 :='5'; parm3 :=541; parm4 :='Text'; parm5 :=5415; END; 2. Вызываю ее из PB: DECLARE tmp_proc PROCEDURE FOR tmp_test_proc() USING sqlca; EXECUTE tmp_proc; if sqlca.sqlcode<>0 then MessageBox('Error',sqlca.sqlerrtext,StopSign!) return end if string s1,s2,s3,s4,s5 FETCH tmp_proc INTO :s1,:s2,:s3,:s4,:s5; if sqlca.sqlcode <> 0 then MessageBox('Error',sqlca.sqlerrtext,StopSign!) CLOSE tmp_proc; return end if CLOSE tmp_proc; Ошибок при выполнении нет. В результате имею: s1='5' parm1 :=55; s2='5' parm2 :='5'; s3='54' parm3 :=541; s4='Text' parm4 :='Text'; s5='541' parm5 :=5415; Что я сделал не так? Или где копать? В integer-переменные считывать пробовал - то же самое (54 вместо 541). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2005, 10:29 |
|
||
|
Глюк при Fetch-е OUT-переменных хранимой процедуры в 10.0
|
|||
|---|---|---|---|
|
#18+
ice_79 wrote: > СУБД Oracle 8i > PB 10.0 - evaluation, только что скачал. Патчи ставить пробовал? Я с десяткой не работаю, но вроде бы 10.2 давненько вышел... Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2005, 11:00 |
|
||
|
Глюк при Fetch-е OUT-переменных хранимой процедуры в 10.0
|
|||
|---|---|---|---|
|
#18+
Dim2000 Патчи ставить пробовал? Я с десяткой не работаю, но вроде бы 10.2 давненько вышел... Как раз сейчас качаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2005, 11:11 |
|
||
|
Глюк при Fetch-е OUT-переменных хранимой процедуры в 10.0
|
|||
|---|---|---|---|
|
#18+
Патч установил, ничего не изменилось. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2005, 16:08 |
|
||
|
Глюк при Fetch-е OUT-переменных хранимой процедуры в 10.0
|
|||
|---|---|---|---|
|
#18+
Не претендуя на истину в последней инстанции, могу сказать следующее. Чтобы фетчить резульсэт надо из процедуры возвращать ref cursor. А чтобы было как у вас, надо через пользовательский SQLCA. HTML Books - using Oracle stored procedures ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2005, 17:20 |
|
||
|
Глюк при Fetch-е OUT-переменных хранимой процедуры в 10.0
|
|||
|---|---|---|---|
|
#18+
Using Transaction objects to call stored procedures - HTML Books ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2005, 17:26 |
|
||
|
Глюк при Fetch-е OUT-переменных хранимой процедуры в 10.0
|
|||
|---|---|---|---|
|
#18+
Да я, блин, и так через RPC (external function) пробовал, получилось совсем смешно: integer-ы вернулись нормально, а у varchar-ов отрубился последний символ. (Все это напоминает особо извращенное издевательство). Через Declare тоже можно получать OUT параметры, даже если не возвращается ссылка на курсор, в 6.5 все отлично работает. //local external для объекта транзакции PUBLIC SUBROUTINE test_proc (ref integer p1, ref string p2, ref integer p3, ref string p4, ref integer p5) RPCFUNC ALIAS FOR "TMP_TEST_PROC" //Вызов integer i1,i3,i5 s2=fill(' ',2000) s4=fill(' ',2000) sqlca.test_proc(i1,s2,i3,s4,i5) //Результат sqlca.sqlcode=0 i1=55 //parm1 :=55; s2='' //parm2 :='5'; i3=541 //parm3 :=541; s4='Tex' //parm4 :='Text'; i5=5415 //parm5 :=5415; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2005, 18:00 |
|
||
|
Глюк при Fetch-е OUT-переменных хранимой процедуры в 10.0
|
|||
|---|---|---|---|
|
#18+
у пары Oracle-Powerbuilder конструкция OUT INTEGER всегда была с "легким сдвигом". Наиболее стабильная использовать OUT ref cusor. но можно пробовать OUT NUMBER(приведенный к SQL тип данных), возможно 10-й Powerbuilder "научился" читать определение процедуры у Oracle, в предыдущих версиях вся проверка производилась методом "попытки" выполнения процедуры во время компиляции. INTEGER у Oracle это PL/SQL тип NUMBER(38,0), и здесь судя по всему и очередная не стыковка или в заданном вопросе проще все сделать OUT VARCHAR2 :), но с национильными настройками сервер-клиент при передаче после десятичной точки придется подолбаться ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2005, 18:17 |
|
||
|
Глюк при Fetch-е OUT-переменных хранимой процедуры в 10.0
|
|||
|---|---|---|---|
|
#18+
ice_79СУБД Oracle 8i PB 10.0 - evaluation, только что скачал. 1. Есть хранимая процедура: Для начала, IMHO, устраните проблему на стороне сервера Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. А если нужно устранить причину - тогда открывается широчайшее поле деятельности по установке EBF, патчей Oracle и т.п. :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2005, 18:33 |
|
||
|
Глюк при Fetch-е OUT-переменных хранимой процедуры в 10.0
|
|||
|---|---|---|---|
|
#18+
Проект большой, серверная часть большая и вызовов процедур с OUT-параметрами слишком много, чтобы было можно пользоваться "заплаточными" методами. Требуется как раз устранить причину. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2005, 10:48 |
|
||
|
Глюк при Fetch-е OUT-переменных хранимой процедуры в 10.0
|
|||
|---|---|---|---|
|
#18+
причина не в Oracle гарантировано, и с этой стороны можете "не латать", иначе бы не работали все третьесторонние проекты работающие с этой СУБД. причина в другом - integer в Oracle совсем не integer в PowerBuilder, у Oracle PL/SQL, в отличии от ASA и MS SQL, все числовые типы данных это различные вариации(subtype) от NUMBER , см. SYS.Standart. и ваш вариант, string s1,s2,s3,s4,s5 FETCH tmp_proc INTO :s1,:s2,:s3,:s4,:s5; мягко говоря(своего программера , который не решил эту проблему за час-"больно наказал") не корректно. для начала попробуйте s1,s3,s5 объявить другим типом - long,decimal,double, только не integer, и тем более не string, это Oracle умеет сам конвертировать тип данных. примерно такой же "капризный" вариант данными типа DATA. и вариант Oracle 8i - PB 10.0 - полностью рабочий вариант , без никаких патчей, только подумать надо немного. П.С. по поводу reference переменных: procedure tst(a_vstr ref varchar2) - со строны PB при вызове надо сразу "зарезирвировать" (fill(' ',2000))столько места, сколько может вернуть процедура...., далеко не всегда максимум , который может вернуться через varchar2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2005, 12:04 |
|
||
|
Глюк при Fetch-е OUT-переменных хранимой процедуры в 10.0
|
|||
|---|---|---|---|
|
#18+
1) Я пробовал и double, и decimal, и long - результат не изменился. 2) При объявлении как RPC пробовал присваивать в переменную перед вызовом ровно столько символов, сколько должно вернуться - ничего не меняется. Попробую PB 10.0 установить на другой машине под WinXP (у меня Win2000 SP4). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2005, 12:26 |
|
||
|
Глюк при Fetch-е OUT-переменных хранимой процедуры в 10.0
|
|||
|---|---|---|---|
|
#18+
В XP (SP2) все заработало сразу. Видимо на моей машине криво установлена ОС. Cпасибо всем за участие. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2005, 17:56 |
|
||
|
|

start [/forum/topic.php?fid=15&msg=33352360&tid=1338057]: |
0ms |
get settings: |
11ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
63ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
| others: | 235ms |
| total: | 393ms |

| 0 / 0 |
