SQL开发知识:Oracle游标使用参考语句实例解析

游标是从表中检索出结果集,从中每次指向一条记录进行交互的机制。

作用

  • 指定结果集中特定行的位置。
  • 基于当前的结果集位置检索一行或连续的几行。
  • 在结果集的当前位置修改行中的数据。
  • 对其他用户所做的数据更改定义不同的敏感性级别。
  • 可以以编程的方式访问数据库。

一个简单实用:

Declare
— 声明游标
Cursor Mycur Is
Select * From Emp;
Empinfo Emp%Rowtype;
Cou Number;
Begin
— 游标操作使用循环,但是在操作之前必须先将游标打开
For Empinfo In Mycur Loop
Cou := Mycur%Rowcount;
Dbms_Output.Put_Line(‘行号:’ || Cou || ‘ 雇员编号:’ || Empinfo.Empno || ‘ 雇员姓名:’ || Empinfo.Ename);
End Loop;
End;

循环取出数据的两种写法:

Declare
— 声明游标
Cursor Mycur Is
Select * From Emp; — List (EmpPo)
Empinfo Emp%Rowtype;
Cou Number;
Begin
— 游标操作使用循环,但是在操作之前必须先将游标打开
If Mycur%Isopen Then
Null;
Else
Open Mycur;
End If;
— 使游标向下一行
Fetch Mycur
Into Empinfo;
— 判断此行是否有数据被发现
While (Mycur%Found) Loop
Cou := Mycur%Rowcount;
Dbms_Output.Put_Line(‘行号:’ || Cou || ‘ 雇员编号:’ || Empinfo.Empno || ‘ 雇员姓名:’ || Empinfo.Ename);
— 修改游标,继续向下
Fetch Mycur
Into Empinfo;
End Loop;
End;

第二种写法:

Declare
— 声明游标
Cursor Mycur Is
Select * From Emp;
Empinfo Emp%Rowtype;
Cou Number;
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 || ‘ 雇员编号:’ || 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 || ‘更新结束…’);
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 || ‘:执行结束。。。’);
Else
Dbms_Output.Put_Line(Re || ‘:执行错误_______’);
End If;
End;

游标是从表中检索出结果集,从中每次指向一条记录进行交互的机制。

作用

  • 指定结果集中特定行的位置。
  • 基于当前的结果集位置检索一行或连续的几行。
  • 在结果集的当前位置修改行中的数据。
  • 对其他用户所做的数据更改定义不同的敏感性级别。
  • 可以以编程的方式访问数据库。

一个简单实用:

Declare
— 声明游标
Cursor Mycur Is
Select * From Emp;
Empinfo Emp%Rowtype;
Cou Number;
Begin
— 游标操作使用循环,但是在操作之前必须先将游标打开
For Empinfo In Mycur Loop
Cou := Mycur%Rowcount;
Dbms_Output.Put_Line(‘行号:’ || Cou || ‘ 雇员编号:’ || Empinfo.Empno || ‘ 雇员姓名:’ || Empinfo.Ename);
End Loop;
End;

循环取出数据的两种写法:

Declare
— 声明游标
Cursor Mycur Is
Select * From Emp; — List (EmpPo)
Empinfo Emp%Rowtype;
Cou Number;
Begin
— 游标操作使用循环,但是在操作之前必须先将游标打开
If Mycur%Isopen Then
Null;
Else
Open Mycur;
End If;
— 使游标向下一行
Fetch Mycur
Into Empinfo;
— 判断此行是否有数据被发现
While (Mycur%Found) Loop
Cou := Mycur%Rowcount;
Dbms_Output.Put_Line(‘行号:’ || Cou || ‘ 雇员编号:’ || Empinfo.Empno || ‘ 雇员姓名:’ || Empinfo.Ename);
— 修改游标,继续向下
Fetch Mycur
Into Empinfo;
End Loop;
End;

第二种写法:

Declare
— 声明游标
Cursor Mycur Is
Select * From Emp;
Empinfo Emp%Rowtype;
Cou Number;
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 || ‘ 雇员编号:’ || 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 || ‘更新结束…’);
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 || ‘:执行结束。。。’);
Else
Dbms_Output.Put_Line(Re || ‘:执行错误_______’);
End If;
End;

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

我想要获取技术服务或软件
服务范围:MySQL、ORACLE、SQLSERVER、MongoDB、PostgreSQL 、程序问题
服务方式:远程服务、电话支持、现场服务,沟通指定方式服务
技术标签:数据恢复、安装配置、数据迁移、集群容灾、异常处理、其它问题
沟通购买:QQ咨询 淘宝咨询 微信咨询 淘宝店铺
版权申明及联系
本站部分文章参考或来源于网络,如有侵权请联系站长。本站提供相关远程技术服务,有需要可联系QQ
数据库远程运维 » SQL开发知识:Oracle游标使用参考语句实例解析