PL/SQL 无效游标错误

Posted

技术标签:

【中文标题】PL/SQL 无效游标错误【英文标题】:PL/SQL invalid cursor error 【发布时间】:2013-07-11 19:59:25 【问题描述】:

所以我真的不知道为什么我的光标不工作。 select 语句工作正常,所以我不确定 SQL 服务器为什么会抛出错误。 For 循环有一个隐式的打开和关闭,所以这也不应该是问题。有什么想法吗?

DECLARE
   var_lname customer.c_last%TYPE;
   var_fname customer.c_first%TYPE;
   var_addr customer.c_address%TYPE;
   var_phone customer.c_dphone%TYPE;
   CURSOR expl_cursor IS SELECT c_last, c_first, c_address, c_dphone from customer;
   cust_record expl_cursor%ROWTYPE;

BEGIN

   DBMS_OUTPUT.PUT_LINE('ClearWater Traders Mailing List');
   FOR cust_record IN expl_cursor
   LOOP
      FETCH expl_cursor INTO cust_record;
      var_lname := cust_record.c_last;
      var_fname := cust_record.c_first;
      var_addr := cust_record.c_address;
      var_phone := cust_record.c_dphone;
      DBMS_OUTPUT.PUT_LINE(var_lname || ' ' || var_fname || ' ' ||
      var_addr || ' ' || var_phone);
   END LOOP;
END;

这是错误:

第 1 行出现错误: ORA-01001: 无效的当前 ORA-06512: 在第 15 行

【问题讨论】:

【参考方案1】:

啊,我解决了这个问题。不能在 for 循环中执行 FETCH。由于光标是自动递增的。

【讨论】:

是的。您正在混合使用两种方法来循环游标结果集。您要么显式地使用open/fetch/close,要么使用隐式的for ... in ... loop 版本。 More in the documentation. 我实际上在发布问题 10 秒后解决了这个问题。有时,写出问题比你可能得到的任何答案都更有帮助。

以上是关于PL/SQL 无效游标错误的主要内容,如果未能解决你的问题,请参考以下文章

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

奇怪的 PL SQL 无效游标

如何使用 pl/sql 中的游标将多列数据插入包含单列的表中?

PL/SQL 触发游标错误

PL/SQL 异常 ORA-06511 游标已打开

带有游标的 PL/SQL 错误,ERROR ORA-06550