小弟是一个菜鸟。。望各位大虾协助。。先谢谢了。
问题如下:我想在一个存储过程A中实现对另一个存储过程B的调用,B有输出参数(参数类型为number)。
直接在A中调用B的名称我知道可以实现,但是如果通过Execute Immediate 怎么调用呢(由于存储过程B是从一个调度表中读取到的。不能直接获得B的名称)create or replace procedure A is
P_RETURN number ; 定义返回参数
begin 
  
  B(P_RETURN) ; 可以实现(但是我不想通过此方法)
   
end A;info_t 是一个调度表
该表假设仅有一个procedure_name字段,表内保存内容为Bcreate or replace procedure A is
P_RETURN number;
v_procedure varchar(255) ;
begin 
  
  select ('call '||procedure_name||'('||:P_RETURN||')') into v_procedure  from info_t ;
  
  Execute Immediate v_procedure ;
   
end A;上面这个方法我只是写了一个实现思路。一定有不对的地方。希望高手能给予解决。谢谢!!(在线等)

解决方案 »

  1.   

    http://download-west.oracle.com/docs/cd/B13789_01/appdev.101/b10807/11_dynam.htm#i13130   EXECUTE IMMEDIATE dynamic_sql_string
          [INTO {define_variable,... | INTO record_name}]
             [USING
                  [IN|OUT|IN OUT] bind_argument,...]
                      [RETURN[ING] INTO
                                       bind_argument,...];Example:create or replace procedure p_test ( v_table_name out varchar2)
    is
      v_sql varchar2(1000);
    begin
      v_sql := 'select table_name from cat where rownum = 1';
      execute immediate v_sql into v_table_name;
    end;
      

  2.   

    存储过程的参数有out类型,可以做为传出参数使用