当前位置: 代码迷 >> Oracle开发 >> 关于怎么调用游标中遍历出的参数有关问题
  详细解决方案

关于怎么调用游标中遍历出的参数有关问题

热度:86   发布时间:2016-04-24 07:24:41.0
关于如何调用游标中遍历出的参数问题
本人有个表tab 有一个字段记录的是存储过程的具体名称,我希望遍历出这个字段,按名称执行存储过程(不存在传参问题)。编译通过,执行时报错:无效的SQL语句。红体字那一行。
CREATE OR REPLACE PROCEDURE SP_LINJIE1 IS
  CURSOR CUR_OPT IS
  SELECT TB_NAME, STATE, T.STATE2, T.PROCEDURE_NAME FROM V_GRSOURCEVST T;
  OPT_VALUE CUR_OPT%ROWTYPE;
BEGIN
  OPEN CUR_OPT;
  LOOP
  FETCH CUR_OPT
  INTO OPT_VALUE;
  CASE
  WHEN OPT_VALUE.STATE = 1 AND OPT_VALUE.STATE2 = 2 THEN
  EXECUTE IMMEDIATE OPT_VALUE.PROCEDURE_NAME; ELSE
  DBMS_OUTPUT.PUT_LINE('invalid operation');
  END CASE;
  EXIT WHEN CUR_OPT%NOTFOUND;
  END LOOP;
  CLOSE CUR_OPT;
END;

------解决方案--------------------
SQL code
  EXECUTE IMMEDIATE OPT_VALUE.PROCEDURE_NAME;--改为  EXECUTE IMMEDIATE 'begin '||OPT_VALUE.PROCEDURE_NAME||'; end;';
------解决方案--------------------
EXECUTE IMMEDIATE OPT_VALUE.PROCEDURE_NAME; 
应该为
EXECUTE IMMEDIATE 'call '||OPT_VALUE.PROCEDURE_NAME||'()';
------解决方案--------------------
CREATE OR REPLACE PROCEDURE SP_LINJIE1 IS
CURSOR CUR_OPT IS
SELECT TB_NAME, STATE, T.STATE2, T.PROCEDURE_NAME FROM V_GRSOURCEVST T;
OPT_VALUE CUR_OPT%ROWTYPE;
vi_out pls_integer;
BEGIN
OPEN CUR_OPT;
LOOP
FETCH CUR_OPT
INTO OPT_VALUE;
  
EXECUTE IMMEDIATE 'begin '|| OPT_VALUE.PROCEDURE_NAME ||'(:1); end;' using out :vi_out;

EXIT WHEN CUR_OPT%NOTFOUND;
END LOOP;
CLOSE CUR_OPT;
END;
  相关解决方案