在ORACLE 过程中,有一个STRING 变量或者VARCHAR变量,其中存放的是从一张表里边取出来的一条记录,这条记录有一个字段值,存放的是另一个过程名,那么在 过程里边如果执行这个 变量中存放的过程名指向的过程呢?比如:P_NAME STRING(200);SELECT P_NAME_COL INTO P_NAME FROM TAB_PRONAME ;--此时 P_NAME中存放的 是 NC_GET_INP(PARAM1,PARAM2,PARAM3);下边该如何执行在这个P_NAME中存放的 NC_GET_INP值呢,还有参数该怎么传进来呢?

解决方案 »

  1.   

    过程调过程,我记得可以直接在代码里
    过程名;
    就行了吧
    比如过程A中要调用过程B
    create or replace procedure A()
    begin
    ...codes
    ...
    B;
    ...
    end A;
      

  2.   

    通过游标来实现不知这种方法是否可行:
    CURSOR cur_pname AS 
    SELECT P_NAME_COL INTO P_NAME FROM TAB_PRONAME ;
    v_pname cur_pname%ROWTYPE;OPEN cur_pname;
    LOOP
      FETCH cur_pname INTO v_pname;
      EXIT WHEN  cur_pname%NOTFOUND;
    调用函数是通过这种方法将参数传进去。
    NC_GET_INP(:v_pname.PARAM1,:v_pname.PARAM2,:v_pname.PARAM3);
      

  3.   

    可以用动态sql执行动态生成的存储过程名,例如:
    1、有一个存储过程p_test如下:
    create or replace procedure p_test
    (
        pi_1 varchar2,
        pi_2 varchar2
    )
    as
    begin
        dbms_output.put_line(pi_1 || ',' || pi_2);
    end p_test;2、用动态sql执行上面的存储过程:
    declare
        str_l_sql varchar2(1000);
    begin
        str_l_sql := 'begin p_test(:a, :b); end;';
        execute immediate str_l_sql using 'test1', 'test2';
    end;