动态游标和静态游标区别:动态游标可以定义游标变量。
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
分享到:
相关推荐
在 Oracle9i 之前,不可能从 Java 存储过程直接返回一个 ResultSet,因为没有定义表单 ResultSet->REF CURSOR 的映射。Oracle9i 增加了此映射,允许从函数返回 ResultSet 或将其作为 OUT 参数传到某个过程。但它仍不...
主要给大家介绍了关于oracle如何合并多个sys_refcursor的相关资料,以及在文末跟大家分享了sys_refcursor 和 cursor 优缺点的比较,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起学习学习吧
使用此程序包,您现在可以运行返回RefCursor的存储过程,或使用数组绑定计数来执行带有参数数组的sql语句。 受支持的Oracle特定属性 OracleParameter(托管和非托管) OracleDbType枚举(托管提供者使用的所有成员...
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; 参数说明: 第一个参数为当前页; 第...
Oracle.DataAccess.dll ... Oracle.ManagedDataAccess.dll ... 两者均可定义Oracle存过游标参数 ...OracleParameter ps_listcsr = new OracleParameter();...ps_listcsr.OracleDbType = OracleDbType.RefCursor;
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; ...
实际上是利用REF CURSOR 代码如下: –procedure返回记录集: ———————-声明一个Package————– CREATE OR REPLACE PACKAGE pkg_test AS TYPEmyrctypeIS REF CURSOR; PROCEDURE get_r(p_id NUMBER,p_rc OUT ...
第一种情况是返回的游标是某个具体的表或视图的数据,如: SQL-Code: 代码如下: CREATE OR REPLACE PROCEDURE P_TESTA ( PRESULT OUT SYS_REFCURSOR ) AS BEGIN OPEN PRESULT FOR SELECT * FROM USERS; END P_TESTA;...
文章目录游标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中创建一个package,这个包里面定义一个refcursor类型,用于记录sql语句查询出来的结果集。创建包的代码如下: create or replace package pagingPackage as type ...
主要介绍了oracle常用sql查询语句部分,并用图文并茂的方式为大家进程实例说明,需要的朋友可以参考下
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_...
有俩种方法: 一种是声明系统游标,一种是声明自定义游标,然后后面操作一样,参数类型为 in out 或out (1)声明个人系统游标.(推荐) 代码如下: create or replace p_temp_procedure ( cur_arg out sys_refcursor;...
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...
利用游标 REF CURSOR 可将数据集(多行记录)传递到PL/SQL函数: SELECT * FROM TABLE (myfunction (CURSOR (SELECT * FROM mytab))); 2. 利用两个实体化视图(或表)作为样板数据 CREATE MATERIALIZED VIEW ...
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
存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中经过第一次编译后再次调用不需要再次编译,...CREATE OR REPLACE PROCEDURE gd_CURSOR(MYCS1 OUT SYS_REFCURSOR
第一部分 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...
CREATE OR REPLACE PACKAGE CHEN_TEST_PACKGE IStype cursor_type is ref cursor; /************************************************************************************/ /* 功能说明:查询某种公告报表...