我在写游标时收到错误 ORA-01001 Invalid cursor show even number of records

Posted

技术标签:

【中文标题】我在写游标时收到错误 ORA-01001 Invalid cursor show even number of records【英文标题】:I am getting error ORA-01001 Invalid cursor while i am writting cursor show even number of records 【发布时间】:2021-07-20 05:03:20 【问题描述】:
DECLARE
    CURSOR c1 IS
    SELECT
        first_name,
        salary
    FROM
        employees;

    v_ename  VARCHAR2(20);
    v_sal    NUMBER;
BEGIN
    OPEN c1;
    LOOP
        FETCH c1 INTO
            v_ename,
            v_sal;
        IF MOD(c1%rowcount, 2) = 0 THEN
            dbms_output.put_line(v_ename
                                 || ' '
                                 || v_sal);
        END IF;

        CLOSE c1;
    END LOOP;

END;

我收到此错误:

ORA-01001:游标无效 ORA-06512:在第 14 行 01001. 00000 - “无效光标”

【问题讨论】:

你应该描述你的问题。这只是代码。 执行代码后出现错误 -->ORA-01001: invalid cursor ORA-06512: at line 14 01001. 00000 - "invalid cursor" 【参考方案1】:

你当然知道。关闭游标 out 循环,而不是在循环内,因为在第一次循环迭代后您将其关闭,而下一次迭代的 FETCH 不再打开 c1 并且 Oracle 引发错误.

  -- CLOSE c1;     -- not here ...
END LOOP;

CLOSE c1;          -- ... but here.

【讨论】:

【参考方案2】:

你忘记了Exit WHEN,你应该在循环外关闭你的光标:

DECLARE
    CURSOR c1 IS
    SELECT
        first_name,
        salary
    FROM
        employees;

    v_ename  VARCHAR2(20);
    v_sal    NUMBER;
BEGIN
    OPEN c1;
    LOOP
        FETCH c1 INTO
            v_ename,
            v_sal;
        exit when c1%NOTFOUND;
        IF MOD(c1%rowcount, 2) = 0 THEN
            dbms_output.put_line(v_ename
                                 || ' '
                                 || v_sal);
        END IF;

     
      END LOOP;
   CLOSE c1;
END;

【讨论】:

以上是关于我在写游标时收到错误 ORA-01001 Invalid cursor show even number of records的主要内容,如果未能解决你的问题,请参考以下文章

PL/SQL:游标使用中的 ORA-01001

过程(PL/SQL 包)中的“ORA-01001 无效游标”

循环退出条件中的“ORA-01001:无效游标”

过程中出现奇怪的错误“Ora-01001 Invalid cursor”

奇怪的 PL SQL 无效游标

第二次运行代码尝试后出现 ORA-01001