【问题标题】:I am getting error ORA-01001 Invalid cursor while i am writting cursor show even number of records我在写游标时收到错误 ORA-01001 Invalid 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"

标签: sql oracle plsql


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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-02
      • 2013-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多