У меня есть хранимая процедура Oracle с одним аргументом IN и одним аргументом OUT . Мне нужно вызвать ее из PowerBuilder

#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)