a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 數據庫 > Oracle > 正文

Oracle 游標使用總結

2024-08-29 13:56:21
字體:
來源:轉載
供稿:網友
Oracle游標分為顯示游標和隱式游標。
顯示游標(Explicit Cursor):在PL/SQL程序中定義的、用于查詢的游標稱作顯示游標。
隱式游標(Implicit Cursor):是指非PL/SQL程序中定義的、而且是在PL/SQL中使用UPDATE/DELETE語句時,Oracle系統自動分配的游標。
一.顯示游標
1.使用步驟
(1)定義 (2)打開 (3)使用 (4)關閉
2.使用演示
首先創建測試用表STUDENT,腳本如下:

復制代碼 代碼如下:


CREATE TABLE "STUDENT" (
"STUNAME" VARCHAR2(10 BYTE),
"STUNO" VARCHAR2(4 BYTE),
"AGE" NUMBER,
"GENDER" VARCHAR2(2 CHAR)
)


(1).使用WHILE循環處理游標
create or replace PROCEDURE PROC_STU1 AS
BEGIN
--顯示游標使用,使用while循環
declare
--1.定義游標,名稱為cur_stu
cursor cur_stu is
select stuno,stuname from student order by stuno;
--定義變量,存放游標取出的數據
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 --游標所指還有數據行,則繼續循環
loop
--打印結果
dbms_output.PUT_LINE(v_stuno||'->'||v_stuname);
--繼續將游標所指的當前行取出放到變量中
fetch cur_stu into v_stuno,v_stuname;
end loop;
close cur_stu; --4.關閉游標
end;
END PROC_STU1;
(2).使用IF..ELSE代替WHILE循環處理游標
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;
--定義變量,存放游標取出的數據
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所指還有數據行
--打印結果
dbms_output.PUT_LINE(v_stuno||'->'||v_stuname);
--繼續將游標所指的當前行取出放到變量中
fetch cur_stu into v_stuno,v_stuname;
else
exit;
end if;
end loop;
close cur_stu; --4.關閉游標
end;
END PROC_STU2;
(3).使用FOR循環處理游標
create or replace PROCEDURE PROC_STU3 AS
BEGIN
--顯示游標使用,使用for循環
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);
--循環做隱含檢查 %notfound
end loop;
--自動關閉游標
end;
END PROC_STU3;
(4).常用的使用EXIT WHEN處理游標
create or replace
PROCEDURE PROC_STU1_1 AS
BEGIN
--顯示游標使用,使用exit when循環
declare
--1.定義游標,名稱為cur_stu
cursor cur_stu is
select stuno,stuname from student order by stuno;
--定義變量,存放游標取出的數據
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; --游標所指還有數據行,則繼續循環
--打印結果
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語句在上下文區內部都是可執行的,因為都有一個游標指向上下文區,此游標就是
SQL游標,與現實游標不同的是,SQL游標在PL/SQL中不需要打開和關閉,而是在執行UPDATE、
DELETE是自動打開和關閉。
上面例子中就是通過SQL%NOTFOUND游標屬性判斷UPDATE語句的執行結果決定是否需要插入新記錄。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 亚洲一级在线 | 日本久久综合 | 中文字幕在线观看精品视频 | 成人一级片视频 | 色欧美片视频在线观看 | 色老头av| 免费在线小视频 | 日韩欧美在线播放 | 国模一区二区三区 | 青青草激情视频 | 成人欧美一区二区三区黑人孕妇 | 欧美日韩国产综合视频 | 超碰97在线人人 | 日本精品一区二区在线观看 | 午夜视频一区 | 欧美成人一区二免费视频软件 | 成人在线免费观看 | 久久国产精品影视 | 久久婷婷色 | 一区二区不卡 | 91免费看| 欧美一级乱黄 | 欧美一级片在线 | 久久精品在线视频 | 日韩av成人 | 亚洲伦理一区 | 日韩中文字幕在线观看 | 黄色毛片网站在线观看 | 亚洲成人精品在线 | 太平公主一级艳史播放高清 | 国产午夜小视频 | 在线免费看a | 久久久久久久国产 | 成人午夜毛片 | 精品网站999www | 在线视频a | 日韩欧美国产一区二区三区 | 成人黄色在线视频 | 久久久久久久99精品免费观看 | 91午夜精品一区二区三区 | 日本在线黄色 |