亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

 更新時(shí)間:2009年10月01日 01:34:38   作者:  
游標(biāo)(CURSOR)也叫光標(biāo),在關(guān)系數(shù)據(jù)庫中經(jīng)常使用,在PL/SQL程序中可以用CURSOR與SELECT一起對表或者視圖中的數(shù)據(jù)進(jìn)行查詢并逐行讀取。
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é)果決定是否需要插入新記錄。

相關(guān)文章

  • oracle group by語句實(shí)例測試

    oracle group by語句實(shí)例測試

    本文將詳細(xì)介紹oracle group by語句,以實(shí)例進(jìn)行測試,需要的朋友可以參考下
    2012-11-11
  • 詳解Oracle的sqlldr理論

    詳解Oracle的sqlldr理論

    這篇文章主要介紹了詳解Oracle的sqlldr理論,SQL*LOADER是ORACLE的數(shù)據(jù)加載工具,通常用來將操作系統(tǒng)文件(數(shù)據(jù))遷移到ORACLE數(shù)據(jù)庫中,SQL*LOADER是大型數(shù)據(jù)倉庫選擇使用的加載方法,因?yàn)樗峁┝俗羁焖俚耐緩?DIRECT,PARALLEL),需要的朋友可以參考下
    2023-07-07
  • Oracle數(shù)據(jù)庫中刪除表空間的詳細(xì)步驟與示例代碼

    Oracle數(shù)據(jù)庫中刪除表空間的詳細(xì)步驟與示例代碼

    在 Oracle 數(shù)據(jù)庫中,表空間是存儲(chǔ)數(shù)據(jù)的邏輯容器,有時(shí)候,我們可能需要?jiǎng)h除不再使用的表空間以釋放空間或進(jìn)行數(shù)據(jù)庫重組,本文將詳細(xì)介紹在 Oracle 數(shù)據(jù)庫中刪除表空間的步驟和示例代碼,需要的朋友可以參考下
    2024-01-01
  • Oracle case函數(shù)使用介紹

    Oracle case函數(shù)使用介紹

    這篇文章主要通過實(shí)例簡要介紹case函數(shù)的用法,學(xué)習(xí)oracle的朋友可以參考下
    2013-09-09
  • 日常收集整理的oracle常用命令大全(收藏)

    日常收集整理的oracle常用命令大全(收藏)

    本文是小編給大家日常收集整理的關(guān)于oracle常用命令大全,非常不錯(cuò),具有收藏價(jià)值,需要的朋友一起看看吧
    2016-11-11
  • oracle 11g em重建報(bào)唯一約束錯(cuò)誤解決方法

    oracle 11g em重建報(bào)唯一約束錯(cuò)誤解決方法

    今天在手工配置Oracle11g的EM時(shí)總是報(bào)如下錯(cuò)誤,也沒有找到解決辦法,以下是我的解決過程,希望可以幫助你們
    2012-11-11
  • oracle 視圖權(quán)限 oracle 創(chuàng)建視圖權(quán)限不足

    oracle 視圖權(quán)限 oracle 創(chuàng)建視圖權(quán)限不足

    在scott用戶下創(chuàng)建視圖的時(shí)候,報(bào)錯(cuò):權(quán)限不足,遇到這個(gè)問題,我也是束手無策,于是網(wǎng)上搜集整理了一下,曬出來和大家分享,希望可以幫助你們
    2012-11-11
  • Oracle自動(dòng)備份腳本

    Oracle自動(dòng)備份腳本

    這篇文章主要介紹了Oracle自動(dòng)備份腳本的相關(guān)資料,需要的朋友可以參考下
    2016-02-02
  • 詳解Linux平臺(tái) Oracle 10gR2(10.2.0.5)RAC安裝 Part1:準(zhǔn)備工作

    詳解Linux平臺(tái) Oracle 10gR2(10.2.0.5)RAC安裝 Part1:準(zhǔn)備工作

    本篇文章主要介紹了Linux平臺(tái) Oracle 10gR2(10.2.0.5)RAC安裝 Part1:準(zhǔn)備工作 ,具有一定的參考價(jià)值,有興趣的可以了解一下。
    2017-01-01
  • Oracle的SYS_GUID()函數(shù)用法及說明

    Oracle的SYS_GUID()函數(shù)用法及說明

    這篇文章主要介紹了Oracle的SYS_GUID()函數(shù)用法及說明,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07

最新評(píng)論