Oracle游标使用参考语句实例解析
游标是从表中检索出结果集,从中每次指向一条记录进行交互的机制。
作用
- 指定结果集中特定行的位置。
- 基于当前的结果集位置检索一行或连续的几行。
- 在结果集的当前位置修改行中的数据。
- 对其他用户所做的数据更改定义不同的敏感性级别。
- 可以以编程的方式访问数据库。
一个简单实用:
Declare --声明游标 CursorMycurIs Select*FromEmp; EmpinfoEmp%Rowtype; CouNumber; Begin --游标操作使用循环,但是在操作之前必须先将游标打开 ForEmpinfoInMycurLoop Cou:=Mycur%Rowcount; Dbms_Output.Put_Line('行号:'||Cou||'雇员编号:'||Empinfo.Empno||'雇员姓名:'||Empinfo.Ename); EndLoop; End;
循环取出数据的两种写法:
Declare --声明游标 CursorMycurIs Select*FromEmp;--List(EmpPo) EmpinfoEmp%Rowtype; CouNumber; Begin --游标操作使用循环,但是在操作之前必须先将游标打开 IfMycur%IsopenThen Null; Else OpenMycur; EndIf; --使游标向下一行 FetchMycur IntoEmpinfo; --判断此行是否有数据被发现 While(Mycur%Found)Loop Cou:=Mycur%Rowcount; Dbms_Output.Put_Line('行号:'||Cou||'雇员编号:'||Empinfo.Empno||'雇员姓名:'||Empinfo.Ename); --修改游标,继续向下 FetchMycur IntoEmpinfo; EndLoop; End;
第二种写法:
Declare --声明游标 CursorMycurIs Select*FromEmp; EmpinfoEmp%Rowtype; CouNumber; Begin --游标操作使用循环,但是在操作之前必须先将游标打开 IfMycur%IsopenThen Null; Else OpenMycur; EndIf; Loop --使游标向下一行 FetchMycur IntoEmpinfo; ExitWhenMycur%Notfound; Cou:=Mycur%Rowcount; Dbms_Output.Put_Line('行号:'||Cou||'雇员编号:'||Empinfo.Empno||'雇员姓名:'||Empinfo.Ename); EndLoop; End;
在存储过程中使用游标
CreateOrReplaceProcedureMyproc(Oi_ReturnOutInteger)Is CursorMycurIs Select*FromEmp_0915; EmpinfoEmp_0915%Rowtype; CouNumber; Exc_ReturnException;--程序中间返回自定义异常 Begin IfMycur%IsopenThen Null; Else OpenMycur; EndIf; Loop FetchMycur IntoEmpinfo; ExitWhenMycur%Notfound; Cou:=Mycur%Rowcount; Dbms_Output.Put_Line(Cou||'开始更新...'); UpdateEmp_0915tSett.Sal=t.Sal+1Wheret.Empno=Empinfo.Empno; Dbms_Output.Put_Line(Cou||'更新结束...'); EndLoop; Commit; Oi_Return:=1; Exception WhenExc_ReturnThen Rollback; Oi_Return:=0; End;
在oracle中测试:
Declare ReInteger; Begin Myproc(Re); IfRe=1Then Dbms_Output.Put_Line(Re||':执行结束。。。'); Else Dbms_Output.Put_Line(Re||':执行错误_______'); EndIf; End;
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。