`

SYS_REFCURSOR一例

阅读更多

1.看见很多人调试过程依然使用DBMS_OUTPUT.PUT_LINE进行着输出,或是对oracle procedure返回resultset比较疑惑,下面的例子仅供参考。

 

Sql代码 复制代码
  1. CREATE OR REPLACE PROCEDURE sp_test (   
  2.        p_outstr  OUT VARCHAR2   
  3.       ,p_outint  OUT NUMBER   
  4.       ,p_ref1    OUT SYS_REFCURSOR   
  5.       ,p_ref2    OUT SYS_REFCURSOR   
  6.       )   
  7. AS  
  8. BEGIN  
  9.    p_outstr := 'abc';   
  10.    p_outint := '56789';   
  11.    OPEN p_ref1 FOR SELECT ROWNUM*2 AS RN FROM DUAL CONNECT BY ROWNUM<=10;   
  12.    OPEN p_ref2 FOR SELECT ROWNUM*2+1 AS RN FROM DUAL CONNECT BY ROWNUM<=10;   
  13.       
  14. END sp_test;   
  15.   
  16. /   
  17.   
  18. 过程已创建。  
CREATE OR REPLACE PROCEDURE sp_test (
       p_outstr  OUT VARCHAR2
      ,p_outint  OUT NUMBER
      ,p_ref1    OUT SYS_REFCURSOR
      ,p_ref2    OUT SYS_REFCURSOR
      )
AS
BEGIN
   p_outstr := 'abc';
   p_outint := '56789';
   OPEN p_ref1 FOR SELECT ROWNUM*2 AS RN FROM DUAL CONNECT BY ROWNUM<=10;
   OPEN p_ref2 FOR SELECT ROWNUM*2+1 AS RN FROM DUAL CONNECT BY ROWNUM<=10;
   
END sp_test;

/

过程已创建。

 

 

利用print客户端打印,sqlplus下:

Sql代码 复制代码
  1. SET AUTOPRINT ON  
  2. VAR p_outstr VARCHAR2(10);   
  3. VAR p_outint NUMBER;   
  4. VAR p_ref1 REFCURSOR;   
  5. VAR p_ref2 REFCURSOR;  
SET AUTOPRINT ON
VAR p_outstr VARCHAR2(10);
VAR p_outint NUMBER;
VAR p_ref1 REFCURSOR;
VAR p_ref2 REFCURSOR;

 

Sql代码 复制代码
  1. scott@ORCL>EXEC sp_test(:p_outstr,:p_outint,:p_ref1,:p_ref2);   
  2.   
  3. PL/SQL 过程已成功完成。   
  4.   
  5.   
  6.         RN   
  7. ----------   
  8.          3   
  9.          5   
  10.          7   
  11.          9   
  12.         11   
  13.         13   
  14.         15   
  15.         17   
  16.         19   
  17.         21   
  18.         23   
  19.   
  20. 已选择11行。   
  21.   
  22.   
  23.         RN   
  24. ----------   
  25.          2   
  26.          4   
  27.          6   
  28.          8   
  29.         10   
  30.         12   
  31.         14   
  32.         16   
  33.         18   
  34.         20   
  35.         22   
  36.   
  37. 已选择11行。   
  38.   
  39.   
  40.   P_OUTINT   
  41. ----------   
  42.      56789   
  43.   
  44.   
  45. P_OUTSTR   
  46. --------------------------------   
  47. abc  
scott@ORCL>EXEC sp_test(:p_outstr,:p_outint,:p_ref1,:p_ref2);

PL/SQL 过程已成功完成。


        RN
----------
         3
         5
         7
         9
        11
        13
        15
        17
        19
        21
        23

已选择11行。


        RN
----------
         2
         4
         6
         8
        10
        12
        14
        16
        18
        20
        22

已选择11行。


  P_OUTINT
----------
     56789


P_OUTSTR
--------------------------------
abc

 也可以在声明输入输出变量之后,依次print p_outstr,...........

 

2.使用对象类型,同样返回结果集.

Sql代码 复制代码
  1. scott@ORCL> CREATE TYPE t_test AS OBJECT (   
  2.   2                 id    NUMBER   
  3.   3             ,name VARCHAR2(20)   
  4.   4      )   
  5.   5  ;   
  6.   6  /   
  7.   
  8. 类型已创建。   
  9.   
  10. scott@ORCL>CREATE TYPE tb_test AS TABLE OF t_test;   
  11.   2  /   
  12.   
  13. 类型已创建。   
  14.   
  15. scott@ORCL>CREATE OR REPLACE FUNCTION f_test RETURN tb_test   
  16.   2  AS  
  17.   3     v_ret tb_test:=tb_test();   
  18.   4  BEGIN  
  19.   5     FOR i IN 1..10 LOOP   
  20.   6         v_ret.EXTEND;   
  21.   7         v_ret(i) := t_test(i,'name'||i);   
  22.   8     END LOOP;   
  23.   9     RETURN v_ret;   
  24.  10  END f_test;   
  25.  11  /   
  26.   
  27. 函数已创建。   
  28.   
  29. scott@ORCL>select * from table(f_test);   
  30.   
  31.         ID NAME  
  32. ---------- ------------------------------   
  33.          1 name1   
  34.          2 name2   
  35.          3 name3   
  36.          4 name4   
  37.          5 name5   
  38.          6 name6   
  39.          7 name7   
  40.          8 name8   
  41.          9 name9   
  42.         10 name10   
  43.   
  44. 已选择10行。  
scott@ORCL> CREATE TYPE t_test AS OBJECT (
  2         		id    NUMBER
  3      		,name VARCHAR2(20)
  4      )
  5  ;
  6  /

类型已创建。

scott@ORCL>CREATE TYPE tb_test AS TABLE OF t_test;
  2  /

类型已创建。

scott@ORCL>CREATE OR REPLACE FUNCTION f_test RETURN tb_test
  2  AS
  3     v_ret tb_test:=tb_test();
  4  BEGIN
  5     FOR i IN 1..10 LOOP
  6         v_ret.EXTEND;
  7         v_ret(i) := t_test(i,'name'||i);
  8     END LOOP;
  9     RETURN v_ret;
 10  END f_test;
 11  /

函数已创建。

scott@ORCL>select * from table(f_test);

        ID NAME
---------- ------------------------------
         1 name1
         2 name2
         3 name3
         4 name4
         5 name5
         6 name6
         7 name7
         8 name8
         9 name9
        10 name10

已选择10行。

 

 

3. 用SELECT BULK COLLECT INTO取得数据,返回嵌套表的例子。

Sql代码 复制代码
  1. scott@ORCL>create table test (id number, name varchar2(20));   
  2.   
  3. 表已创建。   
  4.   
  5. scott@ORCL>CREATE TYPE t_test AS OBJECT (   
  6.   2       id    NUMBER   
  7.   3      ,name VARCHAR2(20)   
  8.   4      )   
  9.   5  /   
  10.   
  11. 类型已创建。   
  12.   
  13. scott@ORCL>;   
  14. scott@ORCL>CREATE TYPE tb_test AS TABLE OF t_test;   
  15.   2  /   
  16.   
  17. 类型已创建。   
  18.   
  19. scott@ORCL>CREATE OR REPLACE FUNCTION f_test RETURN tb_test   
  20.   2  AS  
  21.   3     v_ret tb_test:=tb_test();   
  22.   4  BEGIN  
  23.   5     SELECT t_test(id,name)   
  24.   6       BULK COLLECT INTO v_ret   
  25.   7       FROM TEST;   
  26.   8   
  27.   9     RETURN v_ret;   
  28.  10  END f_test;   
  29.  11  /   
  30.   
  31. 函数已创建。   
  32.   
  33. scott@ORCL>select * from table(f_test);   
  34.   
  35. 未选定行   
  36.   
  37. scott@ORCL>insert into test select rownum,'NAME'||rownum FROM DUAL CONNECT BY RO   
  38. WNUM<=10;   
  39.   
  40. 已创建11行。   
  41.   
  42. scott@ORCL>select * from table(f_test);   
  43.   
  44.         ID NAME  
  45. ---------- ------------------------------   
  46.          1 NAME1   
  47.          2 NAME2   
  48.          3 NAME3   
  49.          4 NAME4   
  50.          5 NAME5   
  51.          6 NAME6   
  52.          7 NAME7   
  53.          8 NAME8   
  54.          9 NAME9   
  55.         10 NAME10   
  56.         11 NAME11   
  57.   
  58. 已选择11行。  

http://diegoball.iteye.com/blog/518604

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    ORACLE 游标

    CREATE OR REPLACE FUNCTION get_salaries(deptno_in IN NUMBER) RETURN SYS_REFCURSOR IS cur_sal SYS_REFCURSOR; BEGIN OPEN cur_sal FOR SELECT sal FROM emp WHERE deptno = deptno_in; RETURN cur_sal; END...

    先查询后更新的oralce函数

    fCursorA SYS_REFCURSOR; -- 表B F11 testb.F11%TYPE; F12 testb.F12%TYPE; F13 testb.F13%TYPE; F14 testb.F14%TYPE; fCursorB SYS_REFCURSOR; BEGIN -- 查询表A OPEN fCursorA FOR SELECT F1, F2, F3, ...

    oracle调用存储过程实现分页

    cursor OUT SYS_REFCURSOR ) AS BEGIN OPEN cursor FOR SELECT * FROM ( SELECT t.*, ROWNUM rn FROM your_table t ORDER BY some_column -- 这里根据实际需求进行排序 ) WHERE rn BETWEEN p_start_row AND ...

    免费的防止锁屏小软件,可用于域统一管控下的锁屏机制

    免费的防止锁屏小软件,可用于域统一管控下的锁屏机制

    Python代码实现带装饰的圣诞树控制台输出

    内容概要:本文介绍了一段简单的Python代码,用于在控制台中输出一棵带有装饰的圣诞树。具体介绍了代码结构与逻辑,包括如何计算并输出树形的各层,如何加入装饰元素以及打印树干。还提供了示例装饰字典,允许用户自定义圣诞树装饰位置。 适用人群:所有对Python编程有一定了解的程序员,尤其是想要学习控制台图形输出的开发者。 使用场景及目标:适用于想要掌握如何使用Python代码创建控制台艺术,特别是对于想要增加节日氛围的小项目。目标是帮助开发者理解和实现基本的字符串操作与格式化技巧,同时享受创造乐趣。 其他说明:本示例不仅有助于初学者理解基本的字符串处理和循环机制,而且还能激发学习者的编程兴趣,通过调整装饰物的位置和树的大小,可以让输出更加个性化和丰富。

    白色大气风格的设计师作品模板下载.zip

    白色大气风格的设计师作品模板下载.zip

    电商平台开发需求文档.doc

    电商平台开发需求文档.doc

    白色简洁风格的办公室室内设计门户网站模板下载.zip

    白色简洁风格的办公室室内设计门户网站模板下载.zip

    VB+access干部档案管理系统(源代码+系统)(20246t).7z

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于计算机科学与技术等相关专业,更为适合;

    VB+ACCESS服装专卖店管理系统设计(源代码+系统+开题报告+答辩PPT)(2024ra).7z

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于计算机科学与技术等相关专业,更为适合;

    (179065812)基于Android stduio的手机银行开发与设计-用于课程设计

    课程设计---基于Android stduio的手机银行开发与设计 现今,手机已经成为人们生活和工作的必备品,在手机各种系统中Android系统是人们用的比较多的系统。手机银行也是人们在生活中比较常用的功能之一。本项目基于Android的手机银行开发与设计主要功能有登录注册、转账、转账记录查询、修改及查询个人信息、添加好友、向好友转账的功能。本项目主要用Android Studio 开发,数据库SQLite数据库,和夜神模拟器。 基于Android stduio的手机银行开发与设计项目主要功能有登录注册、转账、转账记录查询、修改及查询个人信息、添加好友、向好友转账的功能。。内容来源于网络分享,如有侵权请联系我删除。另外如果没有积分的同学需要下载,请私信我。

    白色大气风格的婚礼现场倒计时模板下载.zip

    白色大气风格的婚礼现场倒计时模板下载.zip

    轮式移动机器人轨迹跟踪的MATHLAB程序,运用运动学和动力学模型的双闭环控制,借鉴自抗扰控制技术结合了非线性ESO,跟踪效果良好,控制和抗扰效果较优,可分享控制结构图 这段程序主要是一个小车的动力

    轮式移动机器人轨迹跟踪的MATHLAB程序,运用运动学和动力学模型的双闭环控制,借鉴自抗扰控制技术结合了非线性ESO,跟踪效果良好,控制和抗扰效果较优,可分享控制结构图。 这段程序主要是一个小车的动力学仿真程序,用于模拟小车在参考轨迹下的运动。下面我将对程序进行详细的分析解释。 首先,程序开始时使用`clear`、`clc`和`close all`命令来清除工作空间、命令窗口和图形窗口中的内容。 接下来,程序定义了一系列参数和变量,用于设置仿真的参数和存储仿真过程中的数据。这些参数包括小车的质量、车宽、驱动轮半径等,还有参考轨迹的振幅和频率,仿真步长,仿真时间等。 然后,程序定义了一些元胞数组,用于存储不同阶段的数据。这些数组包括参考轨迹位姿、真实运动轨迹位姿、参考轨迹一阶导数、参考轨迹速度、期望速度、真实速度、控制器输出的控制力矩、控制输入、期望速度与真实速度误差、摩擦值、外界扰动值、总扰动、位姿跟踪误差、扰动观测值等。 接下来,程序给这些变量赋初始值,包括小车的初始位姿和速度,初始速度,期望初始速度,控制器输出的控制力矩,扰动观测值等。 然后,程序进入一个循环,仿真时间从

    vb+ACCESS学生档案管理系统(论文+源代码)(2024ql).7z

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于计算机科学与技术等相关专业,更为适合;

    数据分析-31-疫情数据分析(包含代码和数据)

    这是一份来自开源的全球新冠肺炎数据集,每日时间序列汇总,包括确诊、死亡和治愈。所有数据来自每日病例报告。数据持续更新中。 由于数据集中没有美国的治愈数据,所以在统计全球的现有确诊人员和治愈率的时候会有很大误差,代码里面先不做这个处理,期待数据集的完善。

    白色大气风格的时装设计公司模板下载.zip

    白色大气风格的时装设计公司模板下载.zip

    白色大气风格的商务会议活动模板下载.rar

    白色大气风格的商务会议活动模板下载.rar

    vb+access工资管理系统(论文+程序+开题报告+外文翻译+答辩PPT)(2024k3).7z

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于计算机科学与技术等相关专业,更为适合;

    基于微信小程序的学生签到系统设计与实现ssm.zip

    本次开发一套基于微信小程序的生签到系统,有管理员,教师,学生三个角色。管理员功能有个人中心,学生管理,教师管理,签到管理,学生签到管理,班课信息管理,加入班课管理,请假信息管理,审批信息管理,销假信息管理,系统管理。教师和学生都可以在微信端注册和登录,教师可以管理签到信息,管理班课信息,审批请假信息,查看学生签到,查看加入班级,查看审批信息和销假信息。学生可以查看教师发布的学生签到信息,可以自己选择加入班课信息,添加请假信息,查看审批信息,进行销假操作。基于微信小程序的生签到系统服务端用Java开发的网站后台,接收并且处理微信小程序端传入的json数据,数据库用到了MySQL数据库作为数据的存储。

    技术资源分享-我的运维人生-《新年的奇妙团聚与希望之旅》

    **脚本描述**:本脚本围绕着新年这个充满欢乐与希望的时刻展开。故事发生在一个热闹的小镇,主要角色有在外打拼多年的年轻人小李,他的父母,以及一群充满活力的小镇居民。新年将至,小李踏上回家的旅途,满心期待与家人团聚。在小镇上,大家都在积极筹备新年,贴春联、挂灯笼、准备年夜饭。小李与家人重逢后,一起分享着彼此的故事和喜悦。同时,他们也和小镇居民一起举办了热闹的庆祝活动,在欢声笑语中迎接新年的到来。这个新年不仅让小李重新感受到了家的温暖,也让他对未来充满了信心和希望,他决定和小镇一起成长发展。通过这个脚本,展现新年带给人们的幸福、温暖和对未来的憧憬。

Global site tag (gtag.js) - Google Analytics