佳木斯湛栽影视文化发展公司

主頁 > 知識庫 > Oracle 游標(biāo)使用總結(jié)

Oracle 游標(biāo)使用總結(jié)

熱門標(biāo)簽:服務(wù)外包 鐵路電話系統(tǒng) Linux服務(wù)器 百度競價(jià)排名 網(wǎng)站排名優(yōu)化 地方門戶網(wǎng)站 呼叫中心市場需求 AI電銷
Oracle游標(biāo)分為顯示游標(biāo)和隱式游標(biāo)。
顯示游標(biāo)(Explicit Cursor):在PL/SQL程序中定義的、用于查詢的游標(biāo)稱作顯示游標(biāo)。
隱式游標(biāo)(Implicit Cursor):是指非PL/SQL程序中定義的、而且是在PL/SQL中使用UPDATE/DELETE語句時(shí),Oracle系統(tǒng)自動(dòng)分配的游標(biāo)。
一.顯示游標(biāo)
1.使用步驟
(1)定義 (2)打開 (3)使用 (4)關(guān)閉
2.使用演示
首先創(chuàng)建測試用表STUDENT,腳本如下:
復(fù)制代碼 代碼如下:

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

(1).使用WHILE循環(huán)處理游標(biāo)
create or replace PROCEDURE PROC_STU1 AS
BEGIN
--顯示游標(biāo)使用,使用while循環(huán)
declare
--1.定義游標(biāo),名稱為cur_stu
cursor cur_stu is
select stuno,stuname from student order by stuno;
--定義變量,存放游標(biāo)取出的數(shù)據(jù)
v_stuno varchar(4);
v_stuname varchar(20);
begin
--2.打開游標(biāo)cur_stu
open cur_stu;
--3.將游標(biāo)的當(dāng)前行取出存放到變量中
fetch cur_stu into v_stuno,v_stuname;
while cur_stu%found --游標(biāo)所指還有數(shù)據(jù)行,則繼續(xù)循環(huán)
loop
--打印結(jié)果
dbms_output.PUT_LINE(v_stuno||'->'||v_stuname);
--繼續(xù)將游標(biāo)所指的當(dāng)前行取出放到變量中
fetch cur_stu into v_stuno,v_stuname;
end loop;
close cur_stu; --4.關(guān)閉游標(biāo)
end;
END PROC_STU1;
(2).使用IF..ELSE代替WHILE循環(huán)處理游標(biāo)
create or replace PROCEDURE PROC_STU2 AS
BEGIN
--顯示游標(biāo)使用,使用if判斷
declare
--1.定義游標(biāo),名稱為cur_stu
cursor cur_stu is
select stuno,stuname from student order by stuno;
--定義變量,存放游標(biāo)取出的數(shù)據(jù)
v_stuno varchar(4);
v_stuname varchar(20);
begin
--2.打開游標(biāo)cur_stu
open cur_stu;
--3.將游標(biāo)的當(dāng)前行取出存放到變量中
fetch cur_stu into v_stuno,v_stuname;
loop
if cur_stu%found then --如果游標(biāo)cur_stu所指還有數(shù)據(jù)行
--打印結(jié)果
dbms_output.PUT_LINE(v_stuno||'->'||v_stuname);
--繼續(xù)將游標(biāo)所指的當(dāng)前行取出放到變量中
fetch cur_stu into v_stuno,v_stuname;
else
exit;
end if;
end loop;
close cur_stu; --4.關(guān)閉游標(biāo)
end;
END PROC_STU2;
(3).使用FOR循環(huán)處理游標(biāo)
create or replace PROCEDURE PROC_STU3 AS
BEGIN
--顯示游標(biāo)使用,使用for循環(huán)
declare
--定義游標(biāo),名稱為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;
--自動(dòng)關(guān)閉游標(biāo)
end;
END PROC_STU3;
(4).常用的使用EXIT WHEN處理游標(biāo)
create or replace
PROCEDURE PROC_STU1_1 AS
BEGIN
--顯示游標(biāo)使用,使用exit when循環(huán)
declare
--1.定義游標(biāo),名稱為cur_stu
cursor cur_stu is
select stuno,stuname from student order by stuno;
--定義變量,存放游標(biāo)取出的數(shù)據(jù)
v_stuno varchar(4);
v_stuname varchar(20);
begin
--2.打開游標(biāo)cur_stu
open cur_stu;
loop
--3.將游標(biāo)的當(dāng)前行取出存放到變量中
fetch cur_stu into v_stuno,v_stuname;
exit when cur_stu%notfound; --游標(biāo)所指還有數(shù)據(jù)行,則繼續(xù)循環(huán)
--打印結(jié)果
dbms_output.PUT_LINE(v_stuno||'->'||v_stuname);
end loop;
close cur_stu; --4.關(guān)閉游標(biāo)
end;
END PROC_STU1_1;
二.隱式游標(biāo)
1.使用演示
create or replace PROCEDURE PROC_STU4 AS
BEGIN
--隱式游標(biāo)使用
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ū)內(nèi)部都是可執(zhí)行的,因?yàn)槎加幸粋€(gè)游標(biāo)指向上下文區(qū),此游標(biāo)就是
SQL游標(biāo),與現(xiàn)實(shí)游標(biāo)不同的是,SQL游標(biāo)在PL/SQL中不需要打開和關(guān)閉,而是在執(zhí)行UPDATE、
DELETE是自動(dòng)打開和關(guān)閉。
上面例子中就是通過SQL%NOTFOUND游標(biāo)屬性判斷UPDATE語句的執(zhí)行結(jié)果決定是否需要插入新記錄。
您可能感興趣的文章:
  • 詳解Oracle游標(biāo)的簡易用法
  • Oracle游標(biāo)的使用實(shí)例詳解
  • Oracle中游標(biāo)Cursor基本用法詳解
  • 詳解Oracle隱式游標(biāo)和顯式游標(biāo)
  • Oracle中的游標(biāo)和函數(shù)詳解
  • Oracle出現(xiàn)超出打開游標(biāo)最大數(shù)的解決方法
  • Oracle顯示游標(biāo)的使用及游標(biāo)for循環(huán)
  • Oracle存儲過程返回游標(biāo)實(shí)例詳解
  • oracle 在一個(gè)存儲過程中調(diào)用另一個(gè)返回游標(biāo)的存儲過程
  • Oracle游標(biāo)使用參考語句實(shí)例解析

標(biāo)簽:黃山 仙桃 銅川 蘭州 湖南 湘潭 崇左 衡水

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Oracle 游標(biāo)使用總結(jié)》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    广元市| 巴彦县| 开江县| 延寿县| 通山县| 江安县| 高阳县| 色达县| 吉林市| 双流县| 板桥市| 湘阴县| 临沭县| 曲水县| 华坪县| 大悟县| 武山县| 酒泉市| 井研县| 巴林左旗| 郴州市| 峨眉山市| 文昌市| 衡阳县| 溧阳市| 永嘉县| 湖南省| 高碑店市| 麻阳| 正阳县| 嘉兴市| 贡山| 九寨沟县| 高尔夫| 松桃| 琼结县| 鲁甸县| 通辽市| 陇川县| 宿迁市| 吉林市|