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