SQL> CREATE TABLE emp (
2 id NUMBER PRIMARY KEY,
3 fname VARCHAR2(50),
4 lname VARCHAR2(50)
5 );
Table created.
SQL>
SQL> INSERT INTO emp (id, fname, lname)VALUES (1, 'A', 'B');
1 row created.
SQL> INSERT INTO emp (id, fname, lname)VALUES (2, 'C', 'D');
1 row created.
SQL> INSERT INTO emp (id, fname, lname)VALUES (3, 'Enn', 'F');
1 row created.
SQL> INSERT INTO emp (id, fname, lname)VALUES (4, 'G', 'H');
1 row created.
SQL> INSERT INTO emp (id, fname, lname)VALUES (5, 'G', 'Z');
1 row created.
SQL>
SQL> SET SERVEROUTPUT ON
SQL>
SQL>
SQL> DECLARE
2
3 v_rowid ROWID;
4 v_rowcount NUMBER := 0;
5
6 CURSOR emp_cur1 IS SELECT rowid FROM emp WHERE id > 50;
7
8 CURSOR emp_cur2 IS SELECT rowid FROM emp WHERE id > 50;
9
10 BEGIN
11
12 OPEN emp_cur1;
13
14 DELETE FROM emp WHERE id > 50;
15
16 OPEN emp_cur2;
17
18
19 FETCH emp_cur1 INTO v_rowid;
20 IF emp_cur1%ROWCOUNT > 0
21 THEN
22 DBMS_OUTPUT.PUT_LINE('Cursor 1 includes the deleted rows');
23 ELSE
24 DBMS_OUTPUT.PUT_LINE('Cursor 1 does not include the deleted rows');
25 END IF;
26
27 v_rowcount := 0;
28
29 FETCH emp_cur2 INTO v_rowid;
30 IF emp_cur2%ROWCOUNT > 0
31 THEN
32 DBMS_OUTPUT.PUT_LINE('Cursor 2 includes the deleted rows');
33 ELSE
34 DBMS_OUTPUT.PUT_LINE('Cursor 2 does not include the deleted rows');
35 END IF;
36
37 CLOSE emp_cur1;
38 CLOSE emp_cur2;
39
40 ROLLBACK;
41
42 EXCEPTION
43 WHEN OTHERS
44 THEN
45 DBMS_OUTPUT.PUT_LINE(sqlerrm);
46 END;
47 /
Cursor 1 does not include the deleted rows
Cursor 2 does not include the deleted rows
PL/SQL procedure successfully completed.
SQL>
SQL> SET ESCAPE OFF
SQL>
SQL> drop table emp;
Table dropped.
SQL>