当前位置: 代码迷 >> PB >> 怎樣動態調用有輸出參數的ORACLE 存儲過程?注意是動態調用!解决方案
  详细解决方案

怎樣動態調用有輸出參數的ORACLE 存儲過程?注意是動態調用!解决方案

热度:468   发布时间:2016-04-29 08:29:53.0
怎樣動態調用有輸出參數的ORACLE 存儲過程?注意是動態調用!!
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帮助例子参考
------解决方案--------------------
改成用数据窗口去做吧,输出一个结果集,这样好些;
也可以试试在定义的时候把输出参数放在后面;
  相关解决方案