`

oracle游标变量

阅读更多
 
--1
declare
type emp_cursor_type is ref cursor;
emp_cursor emp_cursor_type;
emp_record emp%rowtype;
begin
   open emp_cursor for select * from emp where deptno=10;
   loop
     fetch emp_cursor into emp_record;
     exit when emp_cursor%notfound;
     dbms_output.put_line('第'||emp_cursor%rowcount||'个雇员'||emp_record.ename);
   end loop;
   close emp_cursor;
end;

--定义 ref cursor类型时 ,指定return 子句
  declare
type emp_record_type is record(
name varchar2(10),
salary number(6,2)
);
type emp_cursor_type is ref cursor return emp_record_type;
emp_cursor emp_cursor_type;
emp_record emp_record_type;
begin

  open emp_cursor for select ename,sal from emp;
  loop
    fetch emp_cursor into emp_record;
    exit when emp_cursor%notfound;
    dbms_output.put_line('第'||emp_cursor%rowcount||'个雇员的名字:'||emp_record.name);
  end loop;
  close emp_cursor;
end;
  --使用cursor表达式,嵌套cursor
  declare

type refcursor is ref cursor;
cursor dept_cursor(no number) is
   select a.dname,cursor(select ename,sal from emp where deptno=a.deptno)
  from dept a where a.deptno=no;
empcur refcursor;
v_dname dept.dname%type;
v_ename emp.ename%type;
v_sal emp.sal%type;
begin
  open dept_cursor(&no);
  loop
    fetch dept_cursor into v_dname,empcur;
    exit when dept_cursor%notfound;
    dbms_output.put_line('部门名:'||v_dname);
    loop
fetch empcur into v_ename,v_sal;
exit when empcur%notfound;
dbms_output.put_line('雇员名:'||v_ename||',工资:'||v_sal);
    end loop;
  end loop;
  close dept_cursor;
end;


---The STRONG_REF_CURSOR and until Oracle 9i also the weak-type need to be declared in a package structure lik this:

create or replace package refcursor_pkg as
type weak8i_ref_cursor is ref cursor;
type strong_ref_cursor is ref cursor return emp%rowtype;
end refcursor_pkg;

--The pl/sql procedure that returns a ref-cursor looks like this:
create or replace procedure test(
p_deptno in number,
p_cursor out refcursor_pkg.weak8i_ref_cursor
)
is
begin
  open p_cursor for
   select * from emp where deptno=p_deptno;
end ;

--Since Oracle 9i you can use SYS_REFCURSOR as the type for the returning REF_CURSOR.
create or replace procedure test(
p_deptno in number,
p_cursor out sys_refcursor
)
is
begin
  open p_cursor for
   select * from emp where deptno=p_deptno;
end ;
/*
Selecting the ref_cursor from JDBC
To get the cursor from Java you can use the following JDBC-code:
*/
public void method() throws SQLException{
  Connection conn = getConnection();
  CallableStatement cstmt = null;
  ResultSet rs = null;
  int deptno = 10;
  Object temp;
  try{
      cstmt = conn.prepareCall("begin  test(?,?); end;");
      cstmt.setInt(1, deptno);
      cstmt.registerOutParameter(2, OracleTypes.CURSOR);
      cstmt.execute();
      rs = (ResultSet) cstmt.getObject(2);
      ResultSetMetaData rsm = rs.getMetaData();
      int columnCount = rsm.getColumnCount();
      while (rs.next()){
         for (int j=0;j< columnCount;j++){
            temp = rs.getObject(j+1);
         }
      }
  } finally {
      if (!rs==null){
        rs.close();
      }
      if (!stmt==null){
        stmt.close();
      }
      if (!conn==null){
        conn.close();
      } 
  }
}


--Calling ref-cursor from pl/sql

create or replace procedure test_call is
  c_cursor REFCURSOR_PKG.STRONG_REF_CURSOR;
  r_emp    emp%rowtype;
begin
  test(10,c_cursor);
  loop
    fetch c_cursor into r_emp;
    exit when c_cursor%notfound;
    dbms_output.put_line(r_emp.ename);
  end loop;
  close c_cursor;
end test_call;


分享到:
评论

相关推荐

    oracle游标变量和数据包

    根据提供的文件内容,本文将详细解释Oracle中的游标变量与程序包的概念及其应用。 ### 一、游标变量 #### 1. Refcursor 类型创建 在 Oracle 的 PL/SQL 环境中,Refcursor 是一种特殊的游标类型,它可以作为函数的...

    ORACLE 游标使用示例

    在"游标.txt"文件中,可能包含了更多关于Oracle游标的使用实例和技巧,包括游标的声明、动态游标、游标变量、游标表达式以及游标在存储过程和函数中的应用。这些内容可以帮助你更深入地理解和掌握Oracle游标,提高你...

    Oracle游标使用案例大全

    Oracle游标是数据库编程中非常重要的一个概念,主要用于处理SQL查询的结果集。游标允许我们按行处理数据,逐条读取结果集,而不仅仅是一次性获取所有数据。在Oracle数据库中,游标对于复杂的事务处理、动态SQL以及...

    oracle 游标 深入浅出 详解 精析 示例

    Oracle游标是数据库管理系统中的一种重要机制,它允许程序员逐行处理查询结果集,而不仅仅是一次性获取所有数据。游标类似于C语言中的指针,能够灵活、高效地处理多条记录,尤其在需要循环处理或者根据当前行数据做...

    Oracle 游标使用大全

    Oracle游标是数据库管理系统中的一种数据处理机制,它允许用户按需逐行处理查询结果,而不是一次性加载所有数据。在Java编程中,我们通常通过JDBC(Java Database Connectivity)来与Oracle数据库交互,其中游标扮演...

    oracle游标使用大全

    总之,Oracle游标提供了处理查询结果的强大工具,使开发者能够灵活地在PL/SQL中操作数据。无论是隐式还是显式游标,都极大地增强了对数据库的交互能力,使得程序能根据查询结果进行适当的操作。理解并熟练运用游标是...

    Oracle游标使用大全

    ### Oracle游标使用详解 #### 一、Oracle游标简介 在Oracle数据库中,游标是一种重要的机制,用于处理查询结果集。它允许用户通过PL/SQL编程语言逐行访问和处理查询返回的数据记录。游标可以是显式定义的(即在...

    oracle游标使用及实例

    ### Oracle游标使用及实例详解 #### 一、Oracle游标概述 在Oracle数据库中,游标(Cursor)是一种用于处理SQL查询结果集的方式。它允许用户逐行地读取和处理查询结果,这对于需要对每一行数据进行特定操作的情况非常...

    Oracle 游标使用大全.pdf

    通过本篇Oracle游标的使用大全,我们可以了解到Oracle数据库游标的类型、属性以及如何在PL/SQL中实现对数据集的逐行处理。这不仅有助于提升程序员的编程技能,也能使他们更深入地理解PL/SQL与Oracle数据库之间的交互...

    oracle游标使用大全1.txt

    #### 三、游标变量与%TYPE 在PL/SQL中,使用变量时通常会指定其数据类型。为了确保类型匹配,可以使用%TYPE属性。例如: ```sql DECLARE v_empno scott.emp.empno%TYPE; v_salary scott.emp.salary%TYPE; BEGIN ...

    Oracle游标使用方法及语法大全.doc

    ### Oracle游标使用详解 #### 一、游标概述 游标是Oracle数据库中用于处理查询结果集的强大工具,尤其适用于需要逐行处理查询结果的情况。在Oracle中,游标可以分为两类:**显式游标**和**隐式游标**。 1. **隐式...

    oracle 游标使用大全

    在 Declare 步骤中,需要声明游标变量和相应的类型。在 Open 步骤中,需要打开游标,指定游标的查询语句。在 Fetch 步骤中,需要从游标中读取数据。在 Close 步骤中,需要关闭游标,释放系统资源。 四、游标的属性 ...

    Oracle游标使用方法及语法大全

    Oracle游标是数据库编程中处理多行查询结果的重要工具,尤其在PL/SQL环境中,它允许程序员逐行处理查询结果。游标分为隐式游标和显式游标。 **隐式游标**是由PL/SQL自动管理的,通常在执行SELECT...INTO语句时使用...

    Oracle 游标 Oracle 游标

    ### Oracle游标详解 在Oracle数据库中,游标(Cursor)是处理数据集的一个关键机制,主要用于执行查询并逐行处理结果集。游标可以被视为一个临时存储区,用于保存SELECT语句的结果集,允许程序对这些结果进行迭代...

    非常详细的Oracle游标整理

    - 显式游标声明包含游标变量和关联的SQL查询,例如`cursor rowList is select * from chg_test_b b;` - 显式游标有四个关键状态:打开(Open)、关闭(Close)、获取(Fetch)和定位(Fetch into)。 - 在循环中...

    ORACLE游标与异常处理

    首先,让我们来理解Oracle游标。游标是数据库系统提供的一种机制,允许用户在结果集上进行迭代,一次处理一行数据。在PL/SQL中,游标用于检索SQL查询返回的结果集,并按需逐行处理。以下是一个简单的游标使用示例: ...

    oracle数据库游标使用例子

    以下是关于Oracle游标使用的一些关键知识点: 1. **游标的基本概念**: 游标(Cursor)是一种机制,它允许我们遍历和操作由SQL查询返回的结果集。通过游标,我们可以控制数据的读取顺序,一次只处理一行,或者在...

Global site tag (gtag.js) - Google Analytics