日期:2014-05-17  浏览次数:20866 次

(各路高手请进,搞了两天没有搞出来)一个拼装SQL语句的问题
我有个数组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类型

请问高手们,我该如何拼这条语句,并动态执行他。

------解决方案--------------------
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;
------解决方案--------------------
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;