• Oracle中返回结果集的存储过程(转帖 网摘)


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

    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;

  • 相关阅读:
    java中的成员变量和局部变量
    多线程实现输出当前时间,和猜数字游戏
    JDBC
    jQuery和原生JS的对比
    JavaScript有趣的知识点
    MySQL的数据类型
    行级元素和块级元素
    重定向和请求转发的区别
    JSP九大内置对象
    Python练习
  • 原文地址:https://www.cnblogs.com/honliv/p/2563966.html
Copyright © 2020-2023  润新知