我有个数组lv_procedure,里面存放的存储过程名。我想动态的调用那些存储过程。过程总共有四个参数,两上输入:lv_fromdate,:lv_enddate是日期型的;两个输出变量,lv_return 字符型的,lcur_flow是游标型的.我做如下拼,不行。编译通过,但是运行会报错。
ORA-01008:并非所有变量都已关联
ORA-06512:在 line3
  
lv_execsql :='begin pkg_report_public.'||lv_procedure(ln_len)||'(:lv_fromdate,:lv_enddate,:lv_return,:lcur_flow); end ;';
execute immediate lv_execsql;然后我改成这样写也不行:
lv_execsql :='begin pkg_report_public.'||lv_procedure(ln_len)||';end;'
execute immediate lv_execsql using lv_fromdate,lv_enddate,lv_return,lcur_flow;报错:pls-00306:调用过程时参数数量或类型错误。lcur_flow 不是SQL类型请问高手们,我该如何拼这条语句,并动态执行他。

解决方案 »

  1.   

    lv_execsql :='begin pkg_report_public.'||lv_procedure(ln_len)||'(:lv_fromdate,:lv_enddate,:lv_return,:lcur_flow); end ;';
    execute immediate lv_execsql  using lv_fromdate,lv_enddate,lv_return,lcur_flow;
      

  2.   

    lv_execsql :='begin pkg_report_public.'||lv_procedure(ln_len)||'(:1,:2,:3,:4); end ;';
    execute immediate lv_execsql  using lv_fromdate,lv_enddate,out lv_return,out lcur_flow;