是这样的,我有两张表A,B。A表的字段存放的是存储过程的名称,B表存放的是存储过程所用的参数,以及和A表关联。
现在我要写一个存储过程C。C的逻辑是:从A,B两张表中查出存储过程的名称和参数,去调用存储过程。我要怎么写呢?请高人帮忙。  如:我从A表中查出的存储过程名称是D。从B表中查出D存储过程的参数是E,F。我在C存储过程中要实现,调用D,并且传参E,F。

解决方案 »

  1.   

    create or replace procedure D (outProcedureNm  out varchar ) is  
       begin 
         select
           A.ProcedureNm 
         from
           a
         into
           outProcedureNm  ;
           outProcedureNm := 'begin' || outProcedureNm  || '(:v1,:v2); end;';
       exception 
         when the others
           null;
       end; create or replace procedure C  is 
      varE varchar(10) ;
      varF varchar(10) ;
      varProcedureNm varchar(1000);
      begin
        select 
         B.E,B.F
        from B
        into inVarE ,inVarF;
        --call D
        D(varProcedureNm);
        execute immediate varProcedureNm using in inVarE ,in inVarF;
      exception 
         when the others
           null;   end;  
      

  2.   

    这句改一下,加个空格,不然可能过不去
    outProcedureNm := 'begin ' || outProcedureNm  || ' (:v1,:v2); end;'; 
      

  3.   

        select 
        B.E,B.F 
        from B 
        into varE ,varF; 
        --call D 
        D(varProcedureNm); 
        execute immediate varProcedureNm using in varE ,in varF; 
      exception 这个地方要改改
      

  4.   

    我现在的问题是:用“,”分隔
      如,“aaa,bbbb,ccc”这个串中的每个都是一个参数。我要如何得到aaa  bbb ccc 呢?
    这样我就可以调用存储过程,d(aaa,bbb,ccc)了。
      

  5.   

    参数里面的逗号这样处理:
    replace(string, ',', ''',''')