(1).使用WHILE循環(huán)處理游標 create or replace PROCEDURE PROC_STU1 AS BEGIN --顯示游標使用,使用while循環(huán) declare --1.定義游標,名稱為cur_stu cursor cur_stu is select stuno,stuname from student order by stuno; --定義變量,存放游標取出的數(shù)據(jù) v_stuno varchar(4); v_stuname varchar(20); begin --2.打開游標cur_stu open cur_stu; --3.將游標的當前行取出存放到變量中 fetch cur_stu into v_stuno,v_stuname; while cur_stu%found --游標所指還有數(shù)據(jù)行,則繼續(xù)循環(huán) loop --打印結果 dbms_output.PUT_LINE(v_stuno||'->'||v_stuname); --繼續(xù)將游標所指的當前行取出放到變量中 fetch cur_stu into v_stuno,v_stuname; end loop; close cur_stu; --4.關閉游標 end; END PROC_STU1; (2).使用IF..ELSE代替WHILE循環(huán)處理游標 create or replace PROCEDURE PROC_STU2 AS BEGIN --顯示游標使用,使用if判斷 declare --1.定義游標,名稱為cur_stu cursor cur_stu is select stuno,stuname from student order by stuno; --定義變量,存放游標取出的數(shù)據(jù) v_stuno varchar(4); v_stuname varchar(20); begin --2.打開游標cur_stu open cur_stu; --3.將游標的當前行取出存放到變量中 fetch cur_stu into v_stuno,v_stuname; loop if cur_stu%found then --如果游標cur_stu所指還有數(shù)據(jù)行 --打印結果 dbms_output.PUT_LINE(v_stuno||'->'||v_stuname); --繼續(xù)將游標所指的當前行取出放到變量中 fetch cur_stu into v_stuno,v_stuname; else exit; end if; end loop; close cur_stu; --4.關閉游標 end; END PROC_STU2; (3).使用FOR循環(huán)處理游標 create or replace PROCEDURE PROC_STU3 AS BEGIN --顯示游標使用,使用for循環(huán) declare --定義游標,名稱為cur_stu cursor cur_stu is select stuno,stuname from student order by stuno; begin for stu in cur_stu loop dbms_output.PUT_LINE(stu.stuno||'->'||stu.stuname); --循環(huán)做隱含檢查 %notfound end loop; --自動關閉游標 end; END PROC_STU3; (4).常用的使用EXIT WHEN處理游標 create or replace PROCEDURE PROC_STU1_1 AS BEGIN --顯示游標使用,使用exit when循環(huán) declare --1.定義游標,名稱為cur_stu cursor cur_stu is select stuno,stuname from student order by stuno; --定義變量,存放游標取出的數(shù)據(jù) v_stuno varchar(4); v_stuname varchar(20); begin --2.打開游標cur_stu open cur_stu; loop --3.將游標的當前行取出存放到變量中 fetch cur_stu into v_stuno,v_stuname; exit when cur_stu%notfound; --游標所指還有數(shù)據(jù)行,則繼續(xù)循環(huán) --打印結果 dbms_output.PUT_LINE(v_stuno||'->'||v_stuname); end loop; close cur_stu; --4.關閉游標 end; END PROC_STU1_1; 二.隱式游標 1.使用演示 create or replace PROCEDURE PROC_STU4 AS BEGIN --隱式游標使用 update student set stuname='張燕廣' where stuno='1104'; --如果更新沒有匹配則插入一條新記錄 if SQL%NOTFOUND then insert into student(STUNO,STUNAME,AGE,GENDER) values('1104','張燕廣',18,'男'); end if; END PROC_STU4; 2.說明 所有的SQL語句在上下文區(qū)內部都是可執(zhí)行的,因為都有一個游標指向上下文區(qū),此游標就是 SQL游標,與現(xiàn)實游標不同的是,SQL游標在PL/SQL中不需要打開和關閉,而是在執(zhí)行UPDATE、 DELETE是自動打開和關閉。 上面例子中就是通過SQL%NOTFOUND游標屬性判斷UPDATE語句的執(zhí)行結果決定是否需要插入新記錄。