`
iswift
  • 浏览: 189999 次
  • 性别: 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
 

 

 

 

 

分享到:
评论

相关推荐

    oracle如何合并多个sys_refcursor详解

    在Oracle数据库环境中,合并多个`sys_refcursor`(也称为游标)的需求常常出现在复杂的业务逻辑中,尤其是在需要重复调用相同逻辑的存储过程时。本文将详细介绍如何通过序列化和XML处理来实现这一功能。 首先,让...

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

    而REF CURSOR则是PL/SQL(Oracle数据库的存储过程语言)中的一个概念,它相当于一个指向结果集的指针,可以在PL/SQL中动态打开和关闭。 在Oracle9i之前的版本,直接从Java存储过程返回ResultSet是不被支持的,因为...

    SqlServer和Oracle的不同的一些体会

    - **Oracle**:则必须使用`Oracle REF CURSOR`来返回查询结果。此时需要使用`OracleCommand.ExecuteReader()`方法,而不是`OLEDBCommand`对象。 - 解决方案:如果希望在Oracle中使用`DataReader`,必须使用微软提供...

    Oracle Procedurl返回数据集的方式总结

    例如,过程定义为`PROCEDURE get_data(p_rc OUT SYS_REFCURSOR);`,然后在调用时捕获返回的游标。 - **记录类型**: 另一种方法是定义一个记录类型,该类型与REF CURSOR返回的列结构匹配,然后返回一个包含此记录...

    java调用oracle存储过程返回结果集,Record,cursor参照.pdf

    2. Ref Cursor类型:Ref Cursor类型是一种 Oracle 数据类型,用于表示游标或结果集。 3. Java调用Oracle存储过程:Java程序可以通过JDBC来调用Oracle存储过程,获取结果集。 4. Type类型:Type类型是Oracle中的一种...

    Java获取Oracle存储过程返回的Cursor

    首先,我们需要创建一个Oracle存储过程,该过程定义了一个名为CURSOR_RESULT的REF CURSOR类型。在提供的示例中,我们有一个名为TEST的包,包含一个名为GET_CURSOR_RESULT的存储过程。该过程接受四个参数:P_...

    Oracle游标的使用

    总结,`sys_refCursor`在Oracle中扮演着重要的角色,它使得过程能以灵活的方式返回数据集,并允许在不同环境之间传递数据。理解和熟练使用`sys_refCursor`对于编写高效、可复用的PL/SQL代码至关重要。

    oracle的存储过程如何返回结果集

    在Oracle中,存储过程可以通过引用游标(Ref Cursor)来返回结果集。Ref Cursor是一种特殊类型的游标,它可以指向一个结果集,这个结果集可以被传递给其他程序单元。当存储过程被调用时,它可以在内部执行SQL查询,...

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

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

    How To Use REF Cursors in JDBC Program

    ResultSet rs = (ResultSet) refCursor.getBaseCursor(); // 遍历ResultSet while (rs.next()) { System.out.println(rs.getString(1)); } ``` ### 四、总结 通过上述步骤,我们可以看到在JDBC程序中使用REF ...

    修改后的oracle游标总结,比较的全面

    Cursur_studentType v_cursor is ref cursor; -- 在这里可以对游标进行操作 End proc_student_c; 游标的属性 游标的属性包括: * `%ROWCOUNT`:返回 FETCH 语句返回的数据行数 * `%FOUND`:最近的 FETCH 语句...

    oracle游标变量和数据包

    在 Oracle 的 PL/SQL 环境中,Refcursor 是一种特殊的游标类型,它可以作为函数的结果返回或存储过程的输出参数来传递结果集。为了能够使用 Refcursor,首先需要定义一个新的类型来表示它: - **弱类型派生**:这种...

    Oracle 存储过程分页

    CREATE OR REPLACE PROCEDURE get_paged_data (start_row IN NUMBER, page_size IN NUMBER, cursor OUT SYS_REFCURSOR) IS BEGIN OPEN cursor FOR SELECT * FROM ( SELECT t.*, ROWNUM rnum FROM your_table t...

    Oracle数据库中的Cursor介绍

    ### Oracle数据库中的Cursor详解 #### 一、游标的基本概念 **游标(Cursor)**是Oracle数据库中的一个重要特性,主要用于处理SQL查询返回的结果集。它允许应用程序以更灵活的方式逐行处理查询结果,而非一次性处理...

    Oracle存储过程返回结果集

    而`SYS_REFCURSOR`是Oracle提供的一种特殊类型,它允许存储过程动态地打开一个游标(即结果集)并将其作为`OUT`参数返回。 以下是一个简单的存储过程示例,它打开一个游标并返回包含`employees`表所有列的结果集: ...

    oracle 迅速查询和更新大数据

    type cursor_type is ref cursor return emp_table%rowtype; c_bulk cursor_type; begin open c_bulk for select * from emp_table; loop fetch c_bulk bulk collect into ref_bulk limit 250000; -- 执行批量...

    java调用oracle存储过程返回结果集,Record,cursor.[参考].pdf

    - `TESTPACKAGE` 包含了一个名为`type_cursor`的Ref Cursor类型变量,用于存储返回的游标。 3. **创建Procedure**: - `test_items` 这个过程接收一个`OUT`参数`MyTable`,类型为`TESTPACKAGE.type_cursor`。在这...

    plsql.zip_PLSQL Developer_cursor

    v_refcursor SYS_REFCURSOR; BEGIN v_query := 'SELECT * FROM employees WHERE department_id = ' || dept_id; OPEN v_refcursor FOR v_query; RETURN v_refcursor; END; ``` 在这个函数中,我们动态构造了SQL...

    VB 调用 Oracle 函数返回数据集的例子

    这个例子展示了如何使用VB来调用Oracle存储过程,该过程返回一个游标类型(REF CURSOR),进而填充ADODB.Recordset对象。 首先,让我们看下Oracle端的PL/SQL代码: ```sql CREATE OR REPLACE PACKAGE "PKG_TEST" ...

Global site tag (gtag.js) - Google Analytics