`
iswift
  • 浏览: 189392 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Oracle ref cursor

阅读更多

 

动态游标和静态游标区别:动态游标可以定义游标变量。

 

1、普通动态游标

 

 

declare  
  type refEmpCur is ref cursor; --定义动态游标  
  empCur  refEmpCur; --声明变量为refEmpCur游标变量  
  empData emp%rowtype; --声明empData为emp表的行类型  
begin  
  open empCur for        --打开游标存储emp表数据  
    select * from emp;  
  
  loop  
    exit when empCur%notfound;  
    fetch empCur  
      into empData;  
    dbms_output.put_line('编号:' || empData.empno || ' 姓名:' || empData.ename);  
  end loop;  
  close empCur;  
end;  

 

输出结果:

 

 

编号:7369 姓名:SMITH  
编号:7499 姓名:ALLEN  
编号:7521 姓名:WARD  
编号:7566 姓名:JONES  
编号:7654 姓名:MARTIN  
编号:7698 姓名:BLAKE  
编号:7782 姓名:CLARK  
编号:7788 姓名:SCOTT  
编号:7839 姓名:KING  
编号:7844 姓名:TURNER  
编号:7876 姓名:ADAMS  
编号:7900 姓名:JAMES  
编号:7902 姓名:FORD  
编号:7934 姓名:MILLER  
编号:7934 姓名:MILLER  
 

2、带返回类型的动态游标

 

 

declare  
  type refDeptCur is ref cursor return dept%rowtype; --返回dept 行类型  
  deptCur  refDeptCur;  
  deptData dept%rowtype;  
begin  
  open deptCur for  
    select * from dept;  
  loop  
    exit when deptCur%notfound;  
    fetch deptCur  
      into deptData;  
    dbms_output.put_line(deptData.dname);  
  end loop;  
  close deptCur;  
end;  
 

输出结果:

 

 

ACCOUNTING  
RESEARCH  
SALES  
OPERATIONS  
OPERATIONS
 

3、静态游标:

 

 

declare  
  empData emp%rowtype; --emp表行类型  
  cursor empCur is --静态游标存储emp表数据  
    select * from emp;  
  
begin  
  open empCur; --打开游标,(注意:这里是显式打开游标,和动态游标有区别)  
  loop  
    fetch empCur  
      into empData;  
    dbms_output.put_line('编号:' || empData.empno || '姓名:' || empData.ename);  
    exit when empCur%notfound;  
  end loop;  
  close empCur; --游标一定要记得关闭,释放资源额  
end;  
 

输出结果:

 

 

编号:7369姓名:SMITH  
编号:7499姓名:ALLEN  
编号:7521姓名:WARD  
编号:7566姓名:JONES  
编号:7654姓名:MARTIN  
编号:7698姓名:BLAKE  
编号:7782姓名:CLARK  
编号:7788姓名:SCOTT  
编号:7839姓名:KING  
编号:7844姓名:TURNER  
编号:7876姓名:ADAMS  
编号:7900姓名:JAMES  
编号:7902姓名:FORD  
编号:7934姓名:MILLER  
编号:7934姓名:MILLER  
 

4、利用动态游标编写返回多行数据的procedure

 

一个简单的存储过程:

--returnData 为返回的游标数据
create or replace procedure pro_getEmp(returnData out sys_refcursor) is
begin
  open returnData for
    select * from dept;
end pro_getEmp;
 

存储过程调用:

 

declare
  rs  sys_refcursor; --定义接收存储过程返回的类型
  dep dept%rowtype; --部门行类型
begin
  pro_getemp(rs);  --调用存储过程
  loop
    exit when rs%notfound;
    fetch rs
      into dep;
    dbms_output.put_line('部门编号:' || dep.deptno || ' 部门名称:' || dep.dname);
  end loop;
  close rs;
end;
 

输出结果:

 

部门编号:10 部门名称:ACCOUNTING
部门编号:20 部门名称:RESEARCH
部门编号:30 部门名称:SALES
部门编号:40 部门名称:OPERATIONS
部门编号:40 部门名称:OPERATIONS
 

 

 

 

 

分享到:
评论

相关推荐

    如何从 Java 存储过程将 JDBC ResultSet 作为 Ref Cursor 返回.doc

    在 Oracle9i 之前,不可能从 Java 存储过程直接返回一个 ResultSet,因为没有定义表单 ResultSet->REF CURSOR 的映射。Oracle9i 增加了此映射,允许从函数返回 ResultSet 或将其作为 OUT 参数传到某个过程。但它仍不...

    oracle如何合并多个sys_refcursor详解

    主要给大家介绍了关于oracle如何合并多个sys_refcursor的相关资料,以及在文末跟大家分享了sys_refcursor 和 cursor 优缺点的比较,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起学习学习吧

    Dapper.Oracle:Oracle对Dapper Micro ORM的支持

    使用此程序包,您现在可以运行返回RefCursor的存储过程,或使用数组绑定计数来执行带有参数数组的sql语句。 受支持的Oracle特定属性 OracleParameter(托管和非托管) OracleDbType枚举(托管提供者使用的所有成员...

    ORACLE分页存储过程

    var c_cur refcursor; exec proc_SpPag(1,'SELECT * FROM T_PERSONINFO_TYPE ',10,:c_Preccount,:c_Ppagecount,:c_cur); print c_Preccount; print c_Ppagecount; print c_cur; 参数说明: 第一个参数为当前页; 第...

    OracleDataAccess游标参数.rar

    Oracle.DataAccess.dll ... Oracle.ManagedDataAccess.dll ... 两者均可定义Oracle存过游标参数 ...OracleParameter ps_listcsr = new OracleParameter();...ps_listcsr.OracleDbType = OracleDbType.RefCursor;

    asp.net中oracle 存储过程(图文)

    CREATE OR REPLACE PROCEDURE gd_CURSOR(MYCS1 OUT SYS_REFCURSOR,MYCS2 OUT SYS_REFCURSOR,a out varchar)as BEGIN a:='test'; OPEN MYCS1 FOR SELECT 1 from dual; OPEN MYCS2 FOR SELECT 2 from dual; END; ...

    Oracle中返回结果集的存储过程分享

    实际上是利用REF CURSOR 代码如下: –procedure返回记录集: ———————-声明一个Package————– CREATE OR REPLACE PACKAGE pkg_test AS TYPEmyrctypeIS REF CURSOR; PROCEDURE get_r(p_id NUMBER,p_rc OUT ...

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

    第一种情况是返回的游标是某个具体的表或视图的数据,如: SQL-Code: 代码如下: CREATE OR REPLACE PROCEDURE P_TESTA ( PRESULT OUT SYS_REFCURSOR ) AS BEGIN OPEN PRESULT FOR SELECT * FROM USERS; END P_TESTA;...

    PL_SQL模块学习之十、游标

    文章目录游标1.1 显式游标1.1.1 创建游标1.1.2 打开游标1.1.3 获取数据1.1.4 关闭游标1.1.5 使用实例1.2 隐式游标1.2.2 游标属性1.3 ...详情参考oracle中cursor与refcursor及sys_refcursor的区别 1.1 显式游标 1.1.1 创

    PL/SQL中编写Oracle数据库分页的存储过程

    由于需要返回查询出来的结果集,需要在PL/SQL中创建一个package,这个包里面定义一个refcursor类型,用于记录sql语句查询出来的结果集。创建包的代码如下: create or replace package pagingPackage as type ...

    oracle常用sql查询语句部分集合(图文)

    主要介绍了oracle常用sql查询语句部分,并用图文并茂的方式为大家进程实例说明,需要的朋友可以参考下

    为快捷显示Oracle执行计划创建存储过程

     3 type explain_cursor_type is ref cursor;  4 explain_cursor explain_cursor_type;  5 a varchar2(2048);  6 begin  7 execute immediate 'explain plan for '||v_sql;  8 open explain_...

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

    有俩种方法: 一种是声明系统游标,一种是声明自定义游标,然后后面操作一样,参数类型为 in out 或out (1)声明个人系统游标.(推荐) 代码如下: create or replace p_temp_procedure ( cur_arg out sys_refcursor;...

    Oracle生成单据编号存储过程的实例代码

    procedure Pro_GetBillNO(TypeTable in varchar2,cur_mycursor out sys_refcursor) as DReceiptCode varchar2(40); DReceiptName varchar2(50); DPrefix1 varchar2(50); DISO varchar2(50); DIsAutoCreate varchar2...

    Oracle 中 table 函数的应用浅析

    利用游标 REF CURSOR 可将数据集(多行记录)传递到PL/SQL函数: SELECT * FROM TABLE (myfunction (CURSOR (SELECT * FROM mytab))); 2. 利用两个实体化视图(或表)作为样板数据 CREATE MATERIALIZED VIEW ...

    oracle表空间中空表统计方法示例介绍

    TYPE c IS REF CURSOR; c2 c; BEGIN DBMS_OUTPUT.PUT_LINE(‘以下为空数据表的表名:’); FOR r1 IN c1 LOOP v_table :=r1.tn; v_sql :=’SELECT COUNT(*) q FROM ‘||v_table; OPEN c2 FOR v_sql; LOOP FETC

    asp.net中调用oracle存储过程的方法

    存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中经过第一次编译后再次调用不需要再次编译,...CREATE OR REPLACE PROCEDURE gd_CURSOR(MYCS1 OUT SYS_REFCURSOR

    Oracle8i_9i数据库基础

    第一部分 Oracle SQL*PLUS基础 23 第一章 Oracle数据库基础 23 §1.1 理解关系数据库系统(RDBMS) 23 §1.1.1 关系模型 23 §1.1.2 Codd十二法则 24 §1.2 关系数据库系统(RDBMS)的组成 24 §1.2.1 RDBMS 内核 24...

    Oracle 查询存储过程做横向报表的方法

    CREATE OR REPLACE PACKAGE CHEN_TEST_PACKGE IStype cursor_type is ref cursor;    /************************************************************************************/ /* 功能说明:查询某种公告报表...

Global site tag (gtag.js) - Google Analytics