%FOUND v13
The %FOUND
attribute is used to test whether or not a row is retrieved from the result set of the specified cursor after a FETCH
on the cursor.
<cursor_name>%FOUND
cursor_name
is the name of the cursor for which a BOOLEAN
data type of TRUE
will be returned if a row is retrieved from the result set of the cursor after a FETCH
.
After the last row of the result set has been fetched the next FETCH
results in %FOUND
returning FALSE
. FALSE
is also returned after the first FETCH
if there are no rows in the result set to begin with.
Referencing %FOUND
on a cursor before it is opened or after it is closed results in an INVALID_CURSOR
exception being thrown.
%FOUND
returns null
if it is referenced when the cursor is open, but before the first FETCH
.
The following example uses %FOUND
.
CREATE OR REPLACE PROCEDURE cursor_example IS v_emp_rec emp%ROWTYPE; CURSOR emp_cur_1 IS SELECT * FROM emp; BEGIN OPEN emp_cur_1; DBMS_OUTPUT.PUT_LINE('EMPNO ENAME'); DBMS_OUTPUT.PUT_LINE('----- -------'); FETCH emp_cur_1 INTO v_emp_rec; WHILE emp_cur_1%FOUND LOOP DBMS_OUTPUT.PUT_LINE(v_emp_rec.empno || ' ' || v_emp_rec.ename); FETCH emp_cur_1 INTO v_emp_rec; END LOOP; CLOSE emp_cur_1; END;
When the previous procedure is invoked, the output appears as follows:
EXEC cursor_example; EMPNO ENAME ----- ------ 7369 SMITH 7499 ALLEN 7521 WARD 7566 JONES 7654 MARTIN 7698 BLAKE 7782 CLARK 7788 SCOTT 7839 KING 7844 TURNER 7876 ADAMS 7900 JAMES 7902 FORD 7934 MILLER