Oracle存储过程返回游标实例详解
有俩种方法:
一种是声明系统游标,一种是声明自定义游标,然后后面操作一样,参数类型为
in out 或out
(1)声明个人系统游标.(推荐)
代码如下:
create or replace p_temp_procedure
(
cur_arg out sys_refcursor; --方法1
)
begin
open cur_arg for select * from tablename;
end
declare
cur_calling sys_refcursor;
begin
p_temp_procedure(cur_calling); --这样这个游标就有值了
for rec_next in cur_calling loop
....
end loop;
end;
(2)在包头中申明一个游表类型,然后调用者申明一个这个类型的游标变量,传给返回游标的存储过程 ,存储过程out这个结果集,这种方法很麻烦.游标类型不能像索引表一样使用create or replace type方法来创建,所以只能在包中申明,并且需要使用/来执行,后面的存储过程才认这个游标类型.(不推荐,但是建议要知道并且要会这种方式,毕竟它有它存在的道理)
代码如下:
--定义全局变量
create or replace package pkg_package
as
type type_cursor is ref cursor;
type type_record is record
(
test01 varchar2(32),
test02 varchar2(32),
test03 varchar2(32)
);
end;
create or replace procedure p_temp_procedure
(
cur_out_arg out pkg_package.type_cursor
)
is
begin
open cur_out_arg for select * from test;
end;
declare
cur_out_arg pkg_package.type_cursor;
rec_arg pkg_package.type_record;
begin
p_temp_procedure(cur_out_arg);
fetch cur_out_arg into rec_arg;
dbms_output.put_line(rec_arg.test01);
dbms_output.put_line(rec_arg.test02);
dbms_output.put_line(rec_arg.test03);
end;
相关推荐
-
oracle 在一个存储过程中调用另一个返回游标的存储过程
第一种情况是返回的游标是某个具体的表或视图的数据,如: SQL-Code: 复制代码 代码如下: CREATE OR REPLACE PROCEDURE P_TESTA ( PRESULT OUT SYS_REFCURSOR ) AS BEGIN OPEN PRESULT FOR SELECT * FROM USERS; END P_TESTA; 其中USERS就是数据库中一个表.在调用的时候只要声明一个该表的ROWTYPE类型就可以了: SQL-Code: 复制代码 代码如下: CREATE
-
Oracle 游标使用总结
Oracle游标分为显示游标和隐式游标. 显示游标(Explicit Cursor):在PL/SQL程序中定义的.用于查询的游标称作显示游标. 隐式游标(Implicit Cursor):是指非PL/SQL程序中定义的.而且是在PL/SQL中使用UPDATE/DELETE语句时,Oracle系统自动分配的游标. 一.显示游标 1.使用步骤 (1)定义 (2)打开 (3)使用 (4)关闭 2.使用演示 首先创建测试用表STUDENT,脚本如下: 复制代码 代码如下: CREATE TABLE "S
-
oracle 声明游标(不具备字段)规则应用
在开发过程中可能会声明一个含有某张表不具备字段的游标,来解决特殊问题,本文将详细介绍这类问题,需要了解更多的朋友可以参考下 其中,data.*是一张表,然后把其他表中的字段也加到sal_data的游标中 Sql代码 复制代码 代码如下: cursor sal_data(cp_center_temp_id varchar2) is select data.*, post.id emp_post_id, doc.Salary_Tax_Bd sa_tax_bd, batch.bill_year_mon
-
详解Oracle隐式游标和显式游标
游标是什么?就是在内存开辟的一块临时存储空间. 1.Oracle隐式游标 1.1Oracle有常用的哪些隐式游标 1.2 Oracle隐式游标演示 -- 隐式游标 (使用的表为Oracle默认自带的emp表) -- sql%rowcount:影响记录条数 sql%found:是否有满足条件的记录 set serveroutput on; declare v_ename a_emp.ename%type; begin select ename into v_ename from a_emp whe
-
Oracle存储过程游标用法分析
本文实例讲述了Oracle存储过程游标用法.分享给大家供大家参考,具体如下: 使用游标的5个步骤 1.声明一些变量用于保存select语句返回的指 2.声明游标,并指定select 语句 3.打开游标 4.从游标中获取记录 5.关闭游标 从游标中获取每一条记录可使用fetch语句.fetch语句将列的指读取到指定的变量中: 语法: fetch cursor_name into variable[, variable ...]; 例子: create or replace procedure se
-
在Oracle PL/SQL中游标声明中表名动态变化的方法
/* 小弟刚刚接触ORACLE存储过程,有一个问题向各位同行求教,小弟写了一个存储过程,其目的是接收一个参数作为表名,然后查询该表中的全部记录的某一个字段的内容导入到另一个表中. ( tabname in varchar ) is v_servicesname tabname.服务类型%type; --这个变量就是用来存放所要取得的字段内容,但不知该如何定义 cursor curSort1 is select 服务类型 from tabna
-
Oracle显示游标的使用及游标for循环
下面给大家介绍在什么情况下用隐式游标,什么情况下用显示游标: 1.查询返回单行记录时→隐式游标: 2.查询返回多行记录并逐行进行处理时→显式游标 --显示游标属性 declare CURSOR cur_emp IS SELECT * FROM emp; row_emp cur_emp%ROWTYPE; BEGIN OPEN cur_emp; FETCH cur_emp INTO row_emp; WHILE cur_emp%FOUND LOOP dbms_output.put_line(row_
-
Oracle存储过程返回游标实例详解
有俩种方法: 一种是声明系统游标,一种是声明自定义游标,然后后面操作一样,参数类型为 in out 或out (1)声明个人系统游标.(推荐) 复制代码 代码如下: create or replace p_temp_procedure ( cur_arg out sys_refcursor; --方法1 ) begin open cur_arg for select * from tablename; end 调用 复制代码 代码如下: declare cur_calling sys_refcu
-
Oracle的out参数实例详解
Oracle的out参数实例详解 一 概念 1.一般来讲,存储过程和存储函数的区别在于存储函数可以有一个返回值:而存储过程没有返回值. 2.过程和函数都可以通过out指定一个或多个输出行.我们可以利用out参数,在过程和函数中实现返回多个值. 3.存储过程和存储函数都可以有out参数. 4.存储过程和存储函数都可以有多个out参数. 5.存储过程可以通过out参数来实现返回值. 6.如果只有一个返回值,用存储函数:否则,就用存储过程. 二 实例 --out参数:查询某个员工姓名月薪和职位 /*
-
Oracle分页查询的实例详解
Oracle分页查询的实例详解 1.Oracle分页查询: SELECT * FROM ( SELECT A.*, ROWNUM RN FROM (SELECT * FROM tab) A WHERE ROWNUM <= 40 ) WHERE RN >= 21; 这个分页比下面的执行时间少,效率高. 2. select * from (select c.*,rownum rn from tab c) where rn between 21 and 40 对比这两种写法,绝大多数的情况下,第一个
-
oracle 的表空间实例详解
oracle 的表空间实例详解 查询表空间 SELECT UPPER(F.TABLESPACE_NAME) "表空间名", D.TOT_GROOTTE_MB "表空间大小(M)", D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空间(M)", TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.TOT_GROOTTE_MB * 100, 2), '990.99')
-
Mybatis调用Oracle存储过程的方法图文详解
1:调用无参数的存储过程. 创建存储过程: Mapper.xml 配置:经测试其他标签(update.insert.select)也可以. Mapper.java MapperTest.java 测试 2:有参数的存储过程调用: 2.1存储过程的创建: 2.2Mapper.xml 的配置: 2.3Mapper.java 2.4MapperTest.java 测试 控制台输出: 3:存储过程的结果集调用. 3.1创建存储过程: 3.2 Mapper.xml 配置 配置 resultMap结果集字段
-
Oracle存储过程和自定义函数详解
概述 PL/SQL中的过程和函数(通常称为子程序)是PL/SQL块的一种特殊的类型,这种类型的子程序可以以编译的形式存放在数据库中,并为后续的程序块调用. 相同点: 完成特定功能的程序 不同点:是否用return语句返回值. 举个例子: create or replace procedure PrintStudents(p_staffName in xgj_test.username%type) as cursor c_testData is select t.sal, t.comm from
-
C# Oracle数据库操作类实例详解
本文所述为C#实现的Oracle数据库操作类,可执行超多常用的Oracle数据库操作,包含了基础数据库连接.关闭连接.输出记录集.执行Sql语句,返回带分页功能的dataset .取表里字段的类型和长度等,同时还有哈稀表自动插入数据库等高级任务.需要特别指出的是:在执行SQL语句,返回 DataReader之前一定要先用.read()打开,然后才能读到数据,再用hashTable对数据库进行insert,update,del操作,注意此时只能用默认的数据库连接"connstr". 完整
-
Oracle排名函数(Rank)实例详解
--已知:两种排名方式(分区和不分区):使用和不使用partition --两种计算方式(连续,不连续),对应函数:dense_rank,rank ·查询原始数据:学号,姓名,科目名,成绩 select * from t_score S_ID S_NAME SUB_NAME SCORE 1 张三 语文 80.00 2 李四 数学 80.00 1 张三 数学 0.00 2 李四 语文 50.00 3 张三丰 语文 10.00 3 张三丰 数学 3 张三丰 体育 120.00 4 杨过 JAVA 9
-
Oracle 自定义split 函数实例详解
Oracle 自定义split 函数 Oracle没有提供split函数,但可以自己建立一个函数实现此功能.比如"abc defg hijkl nmopqr stuvw xyz",分隔符是空格,但空格个数不定. 源代码: CREATE OR REPLACE TYPE ty_str_split IS TABLE OF VARCHAR2 (4000); CREATE OR REPLACE FUNCTION fn_var_split ( p_str IN VARCHAR2,
-
Oracle 大小写转换函数实例详解
Oracle 大小写转换函数 小写转大写UPPer 大写转小写LOWER 例: select lower(ename) from emp; select upper(ename) from emp; --是否包含字母(大写和小写) select case when regexp_like('123','.([a-z]+|[A-Z])') then '包含字母' else '不包含字母' end from dual; --是否包含小写字母 select case when regexp_like(
随机推荐
- iOS Label实现文字渐变色效果
- iis访问出现各种问题(Vs访问正常)的部分处理方法详细整理
- 详解JAVA中转义字符
- 浅谈Java异常的Exception e中的egetMessage()和toString()方法的区别
- JS对HTML表格进行增删改操作
- JavaScript三种绑定事件方式及相互之间的区别分析
- PHP添加MySQL数据记录代码
- C++获得其他程序窗体控件中信息的方法
- 理解Android中Activity的方法回调
- iframe 上下滚动条如何默认在下方实现原理
- php中简单的对称加密算法实现
- js 获取站点应用名的简单实例
- 如何简单地上传文件?
- 如何使用JSP访问MySQL数据库
- Android ListView与getView调用卡顿问题解决办法
- jquery1.4 教程一 便利的设置函数
- Android计时器控件Chronometer应用实例
- ASP编程入门进阶(十三):Ad & Content Rotator
- Python打印“菱形”星号代码方法
- python绘制双Y轴折线图以及单Y轴双变量柱状图的实例