首页 > 解决方案 > 空游标和异常

问题描述

我试图获取异常只是为了看看它是如何工作的。我声明了一个游标,它没有从表中获取任何数据,因为根据我的 where 子句,没有超过 60000 的薪水。游标应该是空的吗?我尝试了两种方法来获取错误消息,但我收到了类似“匿名块已完成”的消息。

set serverout ON
declare
c_empid kt_test.empid%type;

cursor c_kt is select empid into c_empid from kt_test where salary > 60000;

BEGIN
  open c_kt;

  fetch c_kt into c_empid;
exception
WHEN NO_DATA_FOUND THEN
  raise_application_error(-20001,'Data not found for employee');
  close c_kt;
   WHEN OTHERS THEN
    RAISE_APPLICATION_ERROR(-20002,'Other error-'||SQLCODE||'-'||SQLERRM);
end;

set serverout ON
declare
c_empid kt_test.empid%type;

cursor c_kt is select empid into c_empid from kt_test where salary > 60000;

BEGIN
  open c_kt;

  fetch c_kt into c_empid;
  IF c_kt%NOTFOUND THEN 
        DBMS_OUTPUT.PUT_LINE('Explicit Cursor: No data found');
    END IF;
END;

line 1: SQLPLUS Command Skipped: set serverout ON
anonymous block completed

这里缺少什么以便我收到错误消息?

标签: oracleexceptionplsqlcursor

解决方案


一个简单的工作示例:

SQL> set serveroutput on
SQL> declare
  2      cursor c is select 1 from dual where 1 = 0;
  3      vN  number;
  4  begin
  5      open c;
  6      fetch c into vN;
  7
  8      if c%NOTFOUND then
  9          dbms_output.put_line('No data');
 10      end if;
 11  end;
 12  /
No data

PL/SQL procedure successfully completed.

SQL>

推荐阅读