Oracle游標(biāo)使用參考語(yǔ)句實(shí)例解析
游標(biāo)是從表中檢索出結(jié)果集,從中每次指向一條記錄進(jìn)行交互的機(jī)制。
作用
- 指定結(jié)果集中特定行的位置。
- 基于當(dāng)前的結(jié)果集位置檢索一行或連續(xù)的幾行。
- 在結(jié)果集的當(dāng)前位置修改行中的數(shù)據(jù)。
- 對(duì)其他用戶所做的數(shù)據(jù)更改定義不同的敏感性級(jí)別。
- 可以以編程的方式訪問(wèn)數(shù)據(jù)庫(kù)。
一個(gè)簡(jiǎn)單實(shí)用:
Declare
-- 聲明游標(biāo)
Cursor Mycur Is
Select * From Emp;
Empinfo Emp%Rowtype;
Cou Number;
Begin
-- 游標(biāo)操作使用循環(huán),但是在操作之前必須先將游標(biāo)打開(kāi)
For Empinfo In Mycur Loop
Cou := Mycur%Rowcount;
Dbms_Output.Put_Line('行號(hào):' || Cou || ' 雇員編號(hào):' || Empinfo.Empno || ' 雇員姓名:' || Empinfo.Ename);
End Loop;
End;
循環(huán)取出數(shù)據(jù)的兩種寫(xiě)法:
Declare
-- 聲明游標(biāo)
Cursor Mycur Is
Select * From Emp; -- List (EmpPo)
Empinfo Emp%Rowtype;
Cou Number;
Begin
-- 游標(biāo)操作使用循環(huán),但是在操作之前必須先將游標(biāo)打開(kāi)
If Mycur%Isopen Then
Null;
Else
Open Mycur;
End If;
-- 使游標(biāo)向下一行
Fetch Mycur
Into Empinfo;
-- 判斷此行是否有數(shù)據(jù)被發(fā)現(xiàn)
While (Mycur%Found) Loop
Cou := Mycur%Rowcount;
Dbms_Output.Put_Line('行號(hào):' || Cou || ' 雇員編號(hào):' || Empinfo.Empno || ' 雇員姓名:' || Empinfo.Ename);
-- 修改游標(biāo),繼續(xù)向下
Fetch Mycur
Into Empinfo;
End Loop;
End;
第二種寫(xiě)法:
Declare
-- 聲明游標(biāo)
Cursor Mycur Is
Select * From Emp;
Empinfo Emp%Rowtype;
Cou Number;
Begin
-- 游標(biāo)操作使用循環(huán),但是在操作之前必須先將游標(biāo)打開(kāi)
If Mycur%Isopen Then
Null;
Else
Open Mycur;
End If;
Loop
-- 使游標(biāo)向下一行
Fetch Mycur
Into Empinfo;
Exit When Mycur%Notfound;
Cou := Mycur%Rowcount;
Dbms_Output.Put_Line('行號(hào):' || Cou || ' 雇員編號(hào):' || Empinfo.Empno || ' 雇員姓名:' || Empinfo.Ename);
End Loop;
End;
在存儲(chǔ)過(guò)程中使用游標(biāo)
Create Or Replace Procedure Myproc(Oi_Return Out Integer) Is
Cursor Mycur Is
Select * From Emp_0915;
Empinfo Emp_0915%Rowtype;
Cou Number;
Exc_Return Exception; -- 程序中間返回自定義異常
Begin
If Mycur%Isopen Then
Null;
Else
Open Mycur;
End If;
Loop
Fetch Mycur
Into Empinfo;
Exit When Mycur%Notfound;
Cou := Mycur%Rowcount;
Dbms_Output.Put_Line(Cou || '開(kāi)始更新...');
Update Emp_0915 t Set t.Sal = t.Sal + 1 Where t.Empno = Empinfo.Empno;
Dbms_Output.Put_Line(Cou || '更新結(jié)束...');
End Loop;
Commit;
Oi_Return := 1;
Exception
When Exc_Return Then
Rollback;
Oi_Return := 0;
End;
在oracle中測(cè)試:
Declare
Re Integer;
Begin
Myproc(Re);
If Re = 1 Then
Dbms_Output.Put_Line(Re || ':執(zhí)行結(jié)束。。。');
Else
Dbms_Output.Put_Line(Re || ':執(zhí)行錯(cuò)誤_______');
End If;
End;
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
關(guān)于系統(tǒng)重裝后Oracle數(shù)據(jù)庫(kù)完全恢復(fù)的解決辦法
本篇文章是對(duì)系統(tǒng)重裝后Oracle數(shù)據(jù)庫(kù)完全恢復(fù)的解決辦法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06
oracle查詢重復(fù)數(shù)據(jù)和刪除重復(fù)記錄示例分享
oracle查詢重復(fù)數(shù)據(jù)和刪除重復(fù)記錄示例分享,大家參考使用吧2013-12-12
通過(guò)LogMiner實(shí)現(xiàn)Oracle數(shù)據(jù)庫(kù)同步遷移
為了實(shí)現(xiàn)Oracle數(shù)據(jù)庫(kù)之間的數(shù)據(jù)同步,網(wǎng)上的資料比較少的時(shí)候。最好用的Oracle數(shù)據(jù)庫(kù)同步工具是:GoldenGate ,而GoldenGate是要收費(fèi)的。這個(gè)時(shí)候就可以使用LogMiner來(lái)實(shí)現(xiàn)Oracle數(shù)據(jù)同步遷移,下面文章內(nèi)容將給大家介紹其實(shí)現(xiàn)方法2021-09-09
Oracle的PDB數(shù)據(jù)庫(kù)創(chuàng)建DIRECTORY時(shí)遇到ORA-65254問(wèn)題及解決方法
這篇文章主要介紹了Oracle的PDB數(shù)據(jù)庫(kù)創(chuàng)建DIRECTORY時(shí)遇到ORA-65254問(wèn)題,本文給大家分享完美解決方案,需要的朋友可以參考下2023-06-06
SQL中Charindex和Oracle中對(duì)應(yīng)的函數(shù)Instr對(duì)比
在項(xiàng)目中用到了Oracle中 Instr 這個(gè)函數(shù),順便仔細(xì)的再次學(xué)習(xí)了一下這個(gè)知識(shí),使用 Instr 函數(shù)對(duì)某個(gè)字符串進(jìn)行判斷,判斷其是否含有指定的字符2013-10-10
Oracle用戶自定義異常實(shí)現(xiàn)過(guò)程解析
這篇文章主要介紹了Oracle用戶自定義異常實(shí)現(xiàn)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09
Oracle中的定時(shí)任務(wù)實(shí)例教程
定時(shí)任務(wù)相信大家都不陌生,下面這篇文章主要給大家介紹了關(guān)于Oracle中定時(shí)任務(wù)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2023-04-04
oracle刪除主鍵查看主鍵約束及創(chuàng)建聯(lián)合主鍵
本節(jié)文章主要介紹了oracle刪除主鍵查看主鍵約束及創(chuàng)建聯(lián)合主鍵,示例代碼如下,需要的朋友可以參考下2014-07-07
基于Oracle的高性能動(dòng)態(tài)SQL程序開(kāi)發(fā)
對(duì)動(dòng)態(tài)SQL的程序開(kāi)發(fā)進(jìn)行了總結(jié),并結(jié)合筆者實(shí)際開(kāi)發(fā)經(jīng)驗(yàn)給出若干開(kāi)發(fā)技巧2007-03-03

