#powerbuilder
#powerbuilder
Вопрос:
Хранимая процедура Oracle :
create or replace PROCEDURE spu_edt_object3(
o_in VARCHAR,
o_id_object OUT VARCHAR
) as
begin
o_id_object := 'Hello World';
end;
Код Powerbuilder:
string o_message, param, st,o_id_object
o_message= 'HIiiiiii'
DECLARE proc_update PROCEDURE FOR spu_edt_object3
@a_in => :o_message,
@a_id_object = :o_id_object OUTPUT
USING SQLCA;
EXECUTE proc_update;
if SQLCA.SqlCode <> 0 then
MessageBox("SQL error " String(SQLCA.SQLDBCode), SQLCA.SQLErrText )
RETURN -1
end if
FETCH proc_update INTO :o_id_object;
if SQLCA.SqlCode <> 0 then
MessageBox("SQL error " String(SQLCA.SQLDBCode), SQLCA.SQLErrText )
RETURN -1
end if
Я получаю эту ошибку:
ORA-06550: строка 1, столбец 15:
PLS-00306: неправильный номер или типы аргументов при вызове ‘SPU_EDT_OBJECT3’ORA-06550: строка 1, столбец 15:
PL / SQL: оператор игнорируется
Комментарии:
1. Вы пробовали называть параметры в PB так же, как они есть в сохраненной процедуре? (т.Е. ‘o_in’, а не ‘a_in’)
Ответ №1:
Попробуйте объявить ее как локальную внешнюю функцию для вашего объекта транзакции следующим образом:
subroutine spu_edt_object3 (string a_in, ref long a_id_object) rpcfunc alias for "spu_edt_object3"
Обратите внимание на ключевое слово «ref» в объявлении, указывающее, что это ссылочный тип переменной.
Тогда вы сможете вызвать ее следующим образом:
long ll_Out // I have assumed that this is a number
string ls_In
SQLCA.spu_edt_object3(ls_In, ll_Out)