广

oracle数据库

  • MYSQL
  • MSSQL
  • Redis
  • MongoDB
  • oracle数据库
  • 数据管理

    Oracle中返回结果集的存储过程分享

    2018-05-07 10:24:59 次阅读 稿源:互联网
    广告
    全网推广平台,软文发布
    Oracle不像SQLServer那样在存储过程中用Select就可以返回结果集,而是通过Out型的参数进行结果集返回的。实际上是利用REF CURSOR
    代码如下:

    --procedure返回记录集:
    ----------------------声明一个Package--------------
    CREATE OR REPLACE PACKAGE pkg_test
    AS
    TYPEmyrctypeIS REF CURSOR;

    PROCEDURE get_r(p_id NUMBER,p_rc OUT myrctype); --Package中声明名为get 的Procedure(只有接口没内容)
    END pkg_test;

    -----------------声明Package Body,即上面Package中的内容,包括Procedure get---------------------
    CREATE OR REPLACE PACKAGE BODY pkg_test
    AS
    PROCEDURE get_r(p_id NUMBER,p_rc OUT myrctype)
    IS
    sqlstr VARCHAR2 (500);
    BEGIN
    IF p_id = 0 THEN
    OPEN p_rc FOR
    SELECT ID, NAME, sex, address, postcode, birthday
    FROM student;
    ELSE
    sqlstr :=
    'select id,name,sex,address,postcode,birthday
    from student where id=:w_id'; --w_id是个参数,
    --以下 p_rc是个REF CURSOR游标类型,而且是OUT型参数,即可返回一个记录集了。USING p_id就是替换上面SQL中:w_id值拉:)
    OPEN p_rc FOR sqlstr USING p_id; 
    END IF;
    END get;
    END pkg_test;

    --function返回记录集的例子,原理和上面相同,而是用function的return值来返回记录集。

    函数返回记录集:
    建立带ref cursor定义的包和包体及函数:
    代码如下:

    CREATE OR REPLACE
    package pkg_test as

    type myrctype is ref cursor;
    function get_r(intID number) return myrctype;
    end pkg_test;
    /
    CREATE OR REPLACE
    package body pkg_test as
    --函数体
    function get_r(intID number) return myrctype is
    rc myrctype; --定义ref cursor变量
    sqlstr varchar2(500);
    begin
    if intID=0 then

    --静态测试,直接用select语句直接返回结果
    open rc for select id,name,sex,address,postcode,birthday from student;
    else
    --动态sql赋值,用:w_id来申明该变量从外部获得
    sqlstr := 'select id,name,sex,address,postcode,birthday from student where id=:w_id';
    --动态测试,用sqlstr字符串返回结果,用using关键词传递参数
    open rc for sqlstr using intid;
    end if;
    return rc;
    end get;
    end pkg_test;

    一起学吧部分文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与一起学吧进行文章共享合作。

    广告
    广告
    广告
    广告