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;

  • 相关阅读:
    mybatis的知识点总结
    orm框架与缓存的关系
    mybatis知识点
    mybatis
    MyBatis的动态SQL详解
    工资谈判技巧
    MySQL 创建函数(Function)
    开始AFNetworking
    hdu 4778 Rabbit Kingdom(减少国家)
    设计模式:代理模式
  • 原文地址:https://www.cnblogs.com/honliv/p/2563966.html
Copyright © 2011-2022 走看看