zoukankan      html  css  js  c++  java
  • 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;

  • 相关阅读:
    Jquery的事件与动画-----下雨的天气好凉爽
    JQuery选择器--------没有它就没有页面效果
    JavaScript对象--------------你又知道那些
    实体类----app-config
    知错就改,善莫大焉!!!
    二分查找模板
    《软件工程》学习资料积累
    《计算机算法设计与分析》的学习资源和好的课程积累
    软件的概念
    递归方程的求解和算法时间复杂度的分析
  • 原文地址:https://www.cnblogs.com/honliv/p/2563966.html
Copyright © 2011-2022 走看看