首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Gettig错误PLS-00364

Gettig错误PLS-00364
EN

Stack Overflow用户
提问于 2016-05-10 13:28:21
回答 1查看 1.4K关注 0票数 0

我正在尝试创建一个存储过程,其中我将select语句传递给for循环,我使用的是动态表,它在运行时传递,并出现以下错误:

第23行PLS-00364:循环索引变量'I‘的使用无效 第19行PL/SQL: ORA-00942:表或视图不存在

代码语言:javascript
复制
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;

我称这一程序为:

代码语言:javascript
复制
EXEC CREATE_TEST('abc');
EN

回答 1

Stack Overflow用户

发布于 2016-05-10 13:52:21

您需要的是引用游标,因为您不能在动态sql中使用游标for循环。

我不知道您的专栏DEL_IND的确切数据类型。请按此声明。这里是关于Oracle游标的更多信息。

试着在下面

代码语言:javascript
复制
 CREATE OR REPLACE PROCEDURE CREATE_TEST(TBL_NM IN VARCHAR2) 
IS
TYPE c1ref is REF CURSOR;
SRC_ID NUMBER(38);
SQL_Q VARCHAR2(250);
DEL_F VARCHAR2(250);
DEL_IND NUMBER(5);
BEGIN 

    vsql_text := 'select DEL_IND from ' || TBL_NM;

    open c1ref for vsql_text;

    LOOP
        SRC_ID := SRC_FILE_ID_SEQ.NEXTVAL;
        fetch c1ref into DEL_IND;
         exit when c1ref%NOTFOUND;
        IF (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 (DEL_IND = 1) 
        THEN

            execute immediate 'INSERT INTO JESTX_IGNR ' || ' (a,b,c,d,e,DEL_IND) ' ||
            ' SELECT a,b,c,d,e, '|| 2 ||' , '|| SRC_ID || ' FROM ' || TBL_NM;

        END IF ;

     END LOOP;
    CLOSE c1ref;
   COMMIT;

END;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37140023

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档