动态游标和静态游标区别:动态游标可以定义游标变量。
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`(也称为游标)的需求常常出现在复杂的业务逻辑中,尤其是在需要重复调用相同逻辑的存储过程时。本文将详细介绍如何通过序列化和XML处理来实现这一功能。 首先,让...
而REF CURSOR则是PL/SQL(Oracle数据库的存储过程语言)中的一个概念,它相当于一个指向结果集的指针,可以在PL/SQL中动态打开和关闭。 在Oracle9i之前的版本,直接从Java存储过程返回ResultSet是不被支持的,因为...
- **Oracle**:则必须使用`Oracle REF CURSOR`来返回查询结果。此时需要使用`OracleCommand.ExecuteReader()`方法,而不是`OLEDBCommand`对象。 - 解决方案:如果希望在Oracle中使用`DataReader`,必须使用微软提供...
例如,过程定义为`PROCEDURE get_data(p_rc OUT SYS_REFCURSOR);`,然后在调用时捕获返回的游标。 - **记录类型**: 另一种方法是定义一个记录类型,该类型与REF CURSOR返回的列结构匹配,然后返回一个包含此记录...
2. Ref Cursor类型:Ref Cursor类型是一种 Oracle 数据类型,用于表示游标或结果集。 3. Java调用Oracle存储过程:Java程序可以通过JDBC来调用Oracle存储过程,获取结果集。 4. Type类型:Type类型是Oracle中的一种...
首先,我们需要创建一个Oracle存储过程,该过程定义了一个名为CURSOR_RESULT的REF CURSOR类型。在提供的示例中,我们有一个名为TEST的包,包含一个名为GET_CURSOR_RESULT的存储过程。该过程接受四个参数:P_...
总结,`sys_refCursor`在Oracle中扮演着重要的角色,它使得过程能以灵活的方式返回数据集,并允许在不同环境之间传递数据。理解和熟练使用`sys_refCursor`对于编写高效、可复用的PL/SQL代码至关重要。
在Oracle中,存储过程可以通过引用游标(Ref Cursor)来返回结果集。Ref Cursor是一种特殊类型的游标,它可以指向一个结果集,这个结果集可以被传递给其他程序单元。当存储过程被调用时,它可以在内部执行SQL查询,...
使用此程序包,您现在可以运行返回RefCursor的存储过程,或使用数组绑定计数来执行带有参数数组的sql语句。 受支持的Oracle特定属性 OracleParameter(托管和非托管) OracleDbType枚举(托管提供者使用的所有成员...
ResultSet rs = (ResultSet) refCursor.getBaseCursor(); // 遍历ResultSet while (rs.next()) { System.out.println(rs.getString(1)); } ``` ### 四、总结 通过上述步骤,我们可以看到在JDBC程序中使用REF ...
Cursur_studentType v_cursor is ref cursor; -- 在这里可以对游标进行操作 End proc_student_c; 游标的属性 游标的属性包括: * `%ROWCOUNT`:返回 FETCH 语句返回的数据行数 * `%FOUND`:最近的 FETCH 语句...
在 Oracle 的 PL/SQL 环境中,Refcursor 是一种特殊的游标类型,它可以作为函数的结果返回或存储过程的输出参数来传递结果集。为了能够使用 Refcursor,首先需要定义一个新的类型来表示它: - **弱类型派生**:这种...
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详解 #### 一、游标的基本概念 **游标(Cursor)**是Oracle数据库中的一个重要特性,主要用于处理SQL查询返回的结果集。它允许应用程序以更灵活的方式逐行处理查询结果,而非一次性处理...
而`SYS_REFCURSOR`是Oracle提供的一种特殊类型,它允许存储过程动态地打开一个游标(即结果集)并将其作为`OUT`参数返回。 以下是一个简单的存储过程示例,它打开一个游标并返回包含`employees`表所有列的结果集: ...
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; -- 执行批量...
- `TESTPACKAGE` 包含了一个名为`type_cursor`的Ref Cursor类型变量,用于存储返回的游标。 3. **创建Procedure**: - `test_items` 这个过程接收一个`OUT`参数`MyTable`,类型为`TESTPACKAGE.type_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存储过程,该过程返回一个游标类型(REF CURSOR),进而填充ADODB.Recordset对象。 首先,让我们看下Oracle端的PL/SQL代码: ```sql CREATE OR REPLACE PACKAGE "PKG_TEST" ...