【发布时间】:2016-05-10 13:28:21
【问题描述】:
我正在尝试创建一个存储过程,其中我将 select 语句传递给 for 循环,并且我正在使用在运行时传递并出现以下错误的动态表:
第 23 行 PLS-00364:循环索引变量“我”使用无效
第 19 行 PL/SQL:ORA-00942:表或视图不存在
CREATE OR REPLACE PROCEDURE CREATE_TEST(TBL_NM IN VARCHAR2)
IS
SRC_ID NUMBER(38);
SQL_Q VARCHAR2(250);
DEL_F VARCHAR2(250);
BEGIN
FOR I in (SELECT DEL_IND FROM TBL_NM)
LOOP
SRC_ID := SRC_FILE_ID_SEQ.NEXTVAL;
IF I.DEL_IND = 0
THEN
execute immediate 'INSERT INTO TEST_HIST ' || ' (a,b,c,d,e,DEL_IND) ' ||
' SELECT a,b,c,d,e, '|| 0 || ' || ' FROM ' || TBL_NM;
ELSIF I.DEL_IND = 1
THEN
execute immediate 'INSERT INTO JESTX_IGNR ' || ' (a,b,c,d,e,DEL_IND,SRC_ID_NO) ' ||
' SELECT a,b,c,d,e, '|| 2 ||' , '|| SRC_ID || ' FROM ' || TBL_NM;
END IF ;
END LOOP;
COMMIT;
END;
我使用以下方法调用该过程:
EXEC CREATE_TEST('abc');
【问题讨论】:
-
您在第一个动态插入中有不平衡的单引号,但不确定您希望它是什么样子,因为第二个也是错误的 - 值太多...
-
是的,你是对的..第二个插入的值确实比定义的列多。