• %FOUND 布尔型属性,当最近一次读游标返回记录,则值为 TRUE。

  • %NOTFOUND 布尔型属性,与 %FOUND 相反。

  • %ISOPEN 布尔型属性,当游标已打开时返回 TRUE。

  • %ROWCOUNT 数字型属性,返回已从游标中读取的记录数。

示例:简单游标获取数据。

示例:使用参数传递。

  1. obclient> DECLARE
  2. -> CURSOR c_emp (in_job_id varchar default 'AC_MGR' ) IS
  3. -> FROM employees where job_id = in_job_id;
  4. -> v_emp_name employees.first_name%TYPE;
  5. -> v_sal employees.salary%TYPE;
  6. -> BEGIN
  7. -> v_jobid := 'IT_PROG';
  8. -> OPEN c_emp(in_job_id => v_jobid);
  9. -> LOOP
  10. -> FETCH c_emp INTO v_emp_name, v_sal;
  11. -> EXIT WHEN c_emp%NOTFOUND;
  12. -> DBMS_OUTPUT.PUT_LINE('DEPT '||v_jobid||': '||v_emp_name||'''s salary is '||to_char(v_sal) );
  13. -> END LOOP;
  14. -> END;
  15. -> /
  16. Query OK, 0 rows affected (0.05 sec)
  17. DEPT IT_PROG: Alexander's salary is 9000
  18. DEPT IT_PROG: Bruce's salary is 6000
  19. DEPT IT_PROG: David's salary is 4800
  20. DEPT IT_PROG: Valli's salary is 4800
  21. DEPT IT_PROG: Diana's salary is 4200

不同点

NO_DATA_FOUND

%NOTFOUND

定义不同

NO_DATA_FOUND 是异常定义

%NOTFOUND 是游标属性

触发条件不同

SELECT … INTO 语句会触发 NO_DATA_FOUND

  • 当一个显式游标的 WHERE 子句未找到时会触发 %NOTFOUND

  • 在提取循环中要用 或 %FOUND 来确定循环的退出条件。