一、遊標簡介:
遊標是PL&SQL中的一種控制結構。可以分為顯式遊標和隱式遊標。pl&sql會為每一條select語句建立隱式遊標。但是當我們需要處理多條資料時,我們就需要建立顯式遊標。注意:遊標不是模式對象。
二、遊標的幾種常見屬性:
1、%FOUND
--判斷遊標中是否還有資料,若有,返回true,否則,返回false。
2、%NOTFOUND
--與%FOUND 相反
3、%ISOPEN
--判斷遊標是否為開啟狀態
4、%ROWCOUNT
--記錄已從遊標中取出的記錄數
三、遊標應用執行個體:
1、%FOUND屬性的使用
DECLARE
CURSOR mycur IS
SELECT * FROM student;
myrecord student%ROWTYPE;
BEGIN
OPEN mycur;
FETCH mycur INTO myrecord;
WHILE mycur%FOUND LOOP
DBMS_OUTPUT.PUT_LINE(myrecord.stuno||','||myrecord.stuname);
FETCH mycur INTO myrecord;
END LOOP;
CLOSE mycur;
END;
2、%NOTFOUND屬性的使用:
DECLARE
CURSOR cur_para(id varchar2) IS
SELECT stuname FROM student WHERE stuno=111;
t_name student.stuname%TYPE;
BEGIN
OPEN cur_para(111);
LOOP
FETCH cur_para INTO t_name;
EXIT WHEN cur_para%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(t_name);
END LOOP;
CLOSE cur_para;
END;
3、for迴圈中遊標的特殊使用:
SQL> DECLARE
2 CURSOR cur_para(id varchar2) IS
3 SELECT stuname FROM student WHERE stuno=id;
4 BEGIN
5 DBMS_OUTPUT.PUT_LINE('*****');
6 FOR cur IN cur_para('111') LOOP
7 DBMS_OUTPUT.PUT_LINE(cur.stuname);
8 END LOOP;
9 END;
4、%ISOPEN屬性的使用:
SQL> DECLARE
2 t_name student.stuname%TYPE;
3 CURSOR cur(id varchar2) IS
4 SELECT stuname FROM student WHERE stuno=id;
5 BEGIN
6 IF cur%ISOPEN THEN
7 DBMS_OUTPUT.PUT_LINE('THE cur has been opened');
8 ELSE
9 OPEN cur('111');
10 END IF;
11 FETCH cur INTO t_name;
12 CLOSE cur;
13 DBMS_OUTPUT.PUT_LINE(t_name);
14 END;
5、%ROWCOUNT屬性的使用:
SQL> DECLARE
2 t_name VARCHAR2(10);
3 CURSOR mycur IS
4 SELECT stuname FROM student;
5 BEGIN
6 OPEN mycur;
7 LOOP
8 EXIT WHEN mycur%NOTFOUND OR mycur%NOTFOUND IS NULL;
9 DBMS_OUTPUT.PUT_LINE('*****ROWCOUNT****'||mycur%ROWCOUNT);
10 END LOOP;
11 CLOSE mycur;
12 END;