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; 

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

(0)

相关推荐

  • 详解Oracle游标的简易用法

    下面看下Oracle游标的简易用法,具体代码如下所示: create or replace procedure NW_DelYW(iOPERATION_ID number, sUserID varchar2) is sCurDJBH yw_operation_link.djbh%type; cursor table_yw(ywid yw_operation.id%type) is select * from yw_operation_link t1 where t1.operation_id =

  • Oracle 游标使用总结

    Oracle游标分为显示游标和隐式游标. 显示游标(Explicit Cursor):在PL/SQL程序中定义的.用于查询的游标称作显示游标. 隐式游标(Implicit Cursor):是指非PL/SQL程序中定义的.而且是在PL/SQL中使用UPDATE/DELETE语句时,Oracle系统自动分配的游标. 一.显示游标 1.使用步骤 (1)定义 (2)打开 (3)使用 (4)关闭 2.使用演示 首先创建测试用表STUDENT,脚本如下: 复制代码 代码如下: CREATE TABLE "S

  • Oracle中游标Cursor基本用法详解

    查询 SELECT语句用于从数据库中查询数据,当在PL/SQL中使用SELECT语句时,要与INTO子句一起使用,查询的 返回值被赋予INTO子句中的变量,变量的声明是在DELCARE中.SELECT INTO语法如下: SELECT [DISTICT|ALL]{*|column[,column,...]} INTO (variable[,variable,...] |record) FROM {table|(sub-query)}[alias] WHERE............ PL/SQL

  • oracle 在一个存储过程中调用另一个返回游标的存储过程

    第一种情况是返回的游标是某个具体的表或视图的数据,如: SQL-Code: 复制代码 代码如下: CREATE OR REPLACE PROCEDURE P_TESTA ( PRESULT OUT SYS_REFCURSOR ) AS BEGIN OPEN PRESULT FOR SELECT * FROM USERS; END P_TESTA; 其中USERS就是数据库中一个表.在调用的时候只要声明一个该表的ROWTYPE类型就可以了: SQL-Code: 复制代码 代码如下: CREATE

  • Oracle存储过程返回游标实例详解

    有俩种方法: 一种是声明系统游标,一种是声明自定义游标,然后后面操作一样,参数类型为 in out 或out (1)声明个人系统游标.(推荐) 复制代码 代码如下: create or replace p_temp_procedure ( cur_arg out sys_refcursor; --方法1 ) begin open cur_arg for select * from tablename; end 调用 复制代码 代码如下: declare cur_calling sys_refcu

  • Oracle出现超出打开游标最大数的解决方法

    本文实例讲述了Oracle出现超出打开游标最大数的解决方法.分享给大家供大家参考,具体如下: Java代码在执行conn.createStatement()和conn.prepareStatement()的时候,实际上都是相当与在数据库中打开了一个cursor.尤其是,假如你的createStatement和prepareStatement是在一个循环里面的话,就会非常轻易出现这个问题.因为游标一直在不停的打开,而且没有关闭. 一般来说,我们在写Java代码的时候,createStatement

  • Oracle显示游标的使用及游标for循环

    下面给大家介绍在什么情况下用隐式游标,什么情况下用显示游标: 1.查询返回单行记录时→隐式游标: 2.查询返回多行记录并逐行进行处理时→显式游标 --显示游标属性 declare CURSOR cur_emp IS SELECT * FROM emp; row_emp cur_emp%ROWTYPE; BEGIN OPEN cur_emp; FETCH cur_emp INTO row_emp; WHILE cur_emp%FOUND LOOP dbms_output.put_line(row_

  • Oracle游标的使用实例详解

    什么是游标? ①从表中检索出结果集,从中每次指向一条记录进行交互的机制. ②关系数据库中的操作是在完整的行集合上执行的. 由 SELECT 语句返回的行集合包括满足该语句的 WHERE 子句所列条件的所有行.由该语句返回完整的行集合叫做结果集. 应用程序,尤其是互动和在线应用程序,把完整的结果集作为一个单元处理并不总是有效的. 这些应用程序需要一种机制来一次处理一行或连续的几行.而游标是对提供这一机制的结果集的扩展. 游标是通过游标库来实现的.游标库是常常作为数据库系统或数据访问 API 的一部

  • Oracle中的游标和函数详解

     Oracle中的游标和函数详解 1.游标 游标是一种 PL/SQL 控制结构:可以对 SQL 语句的处理进行显示控制,便于对表的行数据 逐条进行处理. 游标并不是一个数据库对象,只是存留在内存中. 操作步骤: 声明游标    打开游标 取出结果,此时的结果取出的是一行数据 关闭游标 到底那种类型可以把一行的数据都装进来 此时使用 ROWTYPE 类型,此类型表示可以把一行的数据都装进来. 例如:查询雇员编号为 7369 的信息(肯定是一行信息). 例:查询雇员编号为 7369 的信息(肯定是一

  • 详解Oracle隐式游标和显式游标

    游标是什么?就是在内存开辟的一块临时存储空间. 1.Oracle隐式游标 1.1Oracle有常用的哪些隐式游标 1.2 Oracle隐式游标演示 -- 隐式游标 (使用的表为Oracle默认自带的emp表) -- sql%rowcount:影响记录条数 sql%found:是否有满足条件的记录 set serveroutput on; declare v_ename a_emp.ename%type; begin select ename into v_ename from a_emp whe

随机推荐