我在写游标时收到错误 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 无效游标”