熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

Oracle 游標使用總結

2022-06-13   來源: Oracle 
Oracle游標分為顯示游標和隱式游標
顯示游標(Explicit Cursor):在PL/SQL程序中定義的用於查詢的游標稱作顯示游標
隱式游標(Implicit Cursor):是指非PL/SQL程序中定義的而且是在PL/SQL中使用UPDATE/DELETE語句時Oracle系統自動分配的游標
顯示游標
使用步驟
()定義 ()打開 ()使用 ()關閉
使用演示
首先創建測試用表STUDENT腳本如下

  復制代碼 代碼如下:

  CREATE TABLE STUDENT (
STUNAME VARCHAR( BYTE)
STUNO VARCHAR( BYTE)
AGE NUMBER
GENDER VARCHAR( CHAR)
)


()使用WHILE循環處理游標
create or replace PROCEDURE PROC_STU AS
BEGIN
顯示游標使用使用while循環
declare
定義游標名稱為cur_stu
cursor cur_stu is
select stunostuname from student order by stuno;
定義變量存放游標取出的數據
v_stuno varchar();
v_stuname varchar();
begin
打開游標cur_stu
open cur_stu;
將游標的當前行取出存放到變量中
fetch cur_stu into v_stunov_stuname;
while cur_stu%found 游標所指還有數據行則繼續循環
loop
打印結果
dbms_outputPUT_LINE(v_stuno||>||v_stuname);
繼續將游標所指的當前行取出放到變量中
fetch cur_stu into v_stunov_stuname;
end loop;
close cur_stu; 關閉游標
end;
END PROC_STU;
()使用IFELSE代替WHILE循環處理游標
create or replace PROCEDURE PROC_STU AS
BEGIN
顯示游標使用使用if判斷
declare
定義游標名稱為cur_stu
cursor cur_stu is
select stunostuname from student order by stuno;
定義變量存放游標取出的數據
v_stuno varchar();
v_stuname varchar();
begin
打開游標cur_stu
open cur_stu;
將游標的當前行取出存放到變量中
fetch cur_stu into v_stunov_stuname;
loop
if cur_stu%found then 如果游標cur_stu所指還有數據行
打印結果
dbms_outputPUT_LINE(v_stuno||>||v_stuname);
繼續將游標所指的當前行取出放到變量中
fetch cur_stu into v_stunov_stuname;
else
exit;
end if;
end loop;
close cur_stu; 關閉游標
end;
END PROC_STU;
()使用FOR循環處理游標
create or replace PROCEDURE PROC_STU AS
BEGIN
顯示游標使用使用for循環
declare
定義游標名稱為cur_stu
cursor cur_stu is
select stunostuname from student order by stuno;
begin
for stu in cur_stu
loop
dbms_outputPUT_LINE(stustuno||>||stustuname);
循環做隱含檢查 %notfound
end loop;
自動關閉游標
end;
END PROC_STU;
()常用的使用EXIT WHEN處理游標
create or replace
PROCEDURE PROC_STU_ AS
BEGIN
顯示游標使用使用exit when循環
declare
定義游標名稱為cur_stu
cursor cur_stu is
select stunostuname from student order by stuno;
定義變量存放游標取出的數據
v_stuno varchar();
v_stuname varchar();
begin
打開游標cur_stu
open cur_stu;
loop
將游標的當前行取出存放到變量中
fetch cur_stu into v_stunov_stuname;
exit when cur_stu%notfound; 游標所指還有數據行則繼續循環
打印結果
dbms_outputPUT_LINE(v_stuno||>||v_stuname);
end loop;
close cur_stu; 關閉游標
end;
END PROC_STU_;
隱式游標
使用演示
create or replace PROCEDURE PROC_STU AS
BEGIN
隱式游標使用
update student set stuname=張燕廣 where stuno=;
如果更新沒有匹配則插入一條新記錄
if SQL%NOTFOUND then
insert into student(STUNOSTUNAMEAGEGENDER)
values(張燕廣);
end if;
END PROC_STU;
說明
所有的SQL語句在上下文區內部都是可執行的因為都有一個游標指向上下文區此游標就是
SQL游標與現實游標不同的是SQL游標在PL/SQL中不需要打開和關閉而是在執行UPDATE
DELETE是自動打開和關閉
上面例子中就是通過SQL%NOTFOUND游標屬性判斷UPDATE語句的執行結果決定是否需要插入新記錄
From:http://tw.wingwit.com/Article/program/Oracle/201404/30540.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.