oracle 存儲過程如下:
create or replace procedure CLT_INV_R001_PRO(
p_dummy1 out varchar2,
p_dummy2 out varchar2,
p_inv_org_id in number,
p_phy_inv_id in number) is
。。。。。。。。
在PB中怎樣動態調用?
我的代碼如下,當沒有p_dummy1 ,p_dummy2 兩個參數的時候,下面的代碼能夠正確執行,但是如果有這個輸出參數的話,下面的代碼在執行【EXECUTE DYNAMIC p2 USING :B,A: DESCRIPTOR sqlda 】完后,發生錯誤
sqlca.sqlerrtext為:ORA-06550: 第 1 行, 第 15 個欄位:
PLS-00703: 清單中有具名參數的多個執行處理
ORA-06550: 第 1 行, 第 15 個欄位:
PL/SQL: Statement ignored
。。。。
PB代碼如下:
ls_sql="execute clt_inv_r001_pro(?,?)"
DECLARE p2 DYNAMIC PROCEDURE FOR SQLSA;
PREPARE SQLSA FROM :ls_sql;
DESCRIBE SQLSA INTO sqlda ;
int a,b
// SetDynamicParm(SQLDA,3,a)
// SetDynamicParm(SQLDA,4,b)
EXECUTE DYNAMIC p2 USING DESCRIPTOR sqlda ;
if sqlca.sqlcode<0 then
ss=sqlca.sqlerrtext
CLOSE p2 ;
end if
------解决方案--------------------
- C/C++ code
Example 3Given this procedure:CREATE OR REPLACE PROCEDURE spu_edt_object(o_id_object OUT NUMBER,o_message OUT VARCHAR2,a_id_object NUMBER,a_param VARCHAR2 := NULL,a_value VARCHAR2 := NULL) asbegino_id_object := 12345;o_message := 'Hello World';end;The DECLARE statement must use named notation because output parameters are defined to the left of input parameters:dec{0} o_id_object, id_obiect = 54321string o_message, param = 'Test'DECLARE proc_update PROCEDURE FOR spu_edt_object (a_id_object => :id_object,a_param => :param)USING SQLCA;EXECUTE proc_update;if SQLCA.SqlCode 0 thenSQLCA.f_out_error()RETURN -1end ifFETCH proc_update INTO :o_id_object, o_message;if SQLCA.SqlCode 0 thenSQLCA.f_out_error()CLOSE proc_update;RETURN -1end if--PB帮助例子参考
------解决方案--------------------
改成用数据窗口去做吧,输出一个结果集,这样好些;
也可以试试在定义的时候把输出参数放在后面;