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)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
window10 安裝Oracle19C 和SQL Developer 的圖文教程
這篇文章主要介紹了window10 安裝Oracle19C 和SQL Developer 教程(圖文詳解),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-03-03
Oracle數(shù)據(jù)倉庫的分層管理器解決方案開發(fā)者網(wǎng)絡(luò)Oracle
Oracle數(shù)據(jù)倉庫的分層管理器解決方案開發(fā)者網(wǎng)絡(luò)Oracle...2007-03-03
Oracle中在pl/sql developer修改表的2種方法
Oracle中在pl/sql developer修改表的2種方法,需要的朋友可以參考一下2013-03-03
Oracle中實現(xiàn)類似于Mysql中的Field()函數(shù)功能
這篇文章主要詳細介紹了在Oracle中如何實現(xiàn)類似于Mysql中的Field()函數(shù)功能,本文主要通過代碼示例介紹了Oracle中的Decode()函數(shù)和Oracle中的row_number,需要的朋友可以參考下2023-06-06
Oracle監(jiān)聽器服務(wù)不能啟動的解決方法
這篇文章主要介紹了Oracle監(jiān)聽器服務(wù)不能啟動的解決方法,需要的朋友可以參考下2014-07-07
oracle行轉(zhuǎn)列與列轉(zhuǎn)行的幾種方式匯總
最近項目需要進行行轉(zhuǎn)列,經(jīng)過上網(wǎng)查找到了一些解決方法,分享給大家,這篇文章主要給大家介紹了關(guān)于oracle行轉(zhuǎn)列與列轉(zhuǎn)行的幾種方式,文中通過圖文以及實例代碼介紹的非常詳細,需要的朋友可以參考下2023-05-05

