游標(biāo)是從表中檢索出結(jié)果集,從中每次指向一條記錄進(jìn)行交互的機(jī)制。
作用
- 指定結(jié)果集中特定行的位置。
- 基于當(dāng)前的結(jié)果集位置檢索一行或連續(xù)的幾行。
- 在結(jié)果集的當(dāng)前位置修改行中的數(shù)據(jù)。
- 對其他用戶所做的數(shù)據(jù)更改定義不同的敏感性級別。
- 可以以編程的方式訪問數(shù)據(jù)庫。
一個(gè)簡單實(shí)用:
Declare
-- 聲明游標(biāo)
Cursor Mycur Is
Select * From Emp;
Empinfo Emp%Rowtype;
Cou Number;
Begin
-- 游標(biāo)操作使用循環(huán),但是在操作之前必須先將游標(biāo)打開
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
-- 聲明游標(biāo)
Cursor Mycur Is
Select * From Emp; -- List (EmpPo)
Empinfo Emp%Rowtype;
Cou Number;
Begin
-- 游標(biāo)操作使用循環(huán),但是在操作之前必須先將游標(biāo)打開
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('行號:' || Cou || ' 雇員編號:' || Empinfo.Empno || ' 雇員姓名:' || Empinfo.Ename);
-- 修改游標(biāo),繼續(xù)向下
Fetch Mycur
Into Empinfo;
End Loop;
End;
第二種寫法:
Declare
-- 聲明游標(biāo)
Cursor Mycur Is
Select * From Emp;
Empinfo Emp%Rowtype;
Cou Number;
Begin
-- 游標(biāo)操作使用循環(huán),但是在操作之前必須先將游標(biāo)打開
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('行號:' || Cou || ' 雇員編號:' || Empinfo.Empno || ' 雇員姓名:' || Empinfo.Ename);
End Loop;
End;
在存儲(chǔ)過程中使用游標(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 || '開始更新...');
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í)行錯(cuò)誤_______');
End If;
End;
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
您可能感興趣的文章:- 詳解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存儲(chǔ)過程返回游標(biāo)實(shí)例詳解
- Oracle 游標(biāo)使用總結(jié)
- oracle 在一個(gè)存儲(chǔ)過程中調(diào)用另一個(gè)返回游標(biāo)的存儲(chǔ)過程