隨筆 - 9  文章 - 5  trackbacks - 0
          <2009年1月>
          28293031123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          google了一篇不錯的例子,加了點注解,這樣看起來更方便了:)

          Oracle不像SQLServer那樣在存儲過程中用Select就可以返回結果集,而是通過Out型的參數進行結果集返回的。實際上是利用REF CURSOR

          --procedure返回記錄集:

          ----------------------聲明一個Package--------------
          CREATE OR REPLACE PACKAGE pkg_test
          AS
          TYPE myrctype IS REF CURSOR;

          PROCEDURE get (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 (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
          /* 定義ref cursor類型
          不加return類型,為弱類型,允許動態(tài)sql查詢,
          否則為強類型,無法使用動態(tài)sql查詢;
          */
          type myrctype is ref cursor;
          function get(intID number) return myrctype;
          end pkg_test;
          /

          CREATE OR REPLACE
          package body pkg_test as
          --函數體
          function get(intID number) return myrctype is
          rc myrctype; --定義ref cursor變量
          sqlstr varchar2(500);
          begin
          if intID=0 then
          --靜態(tài)測試,直接用select語句直接返回結果
          open rc for select id,name,sex,address,postcode,birthday from student;
          else
          --動態(tài)sql賦值,用:w_id來申明該變量從外部獲得
          sqlstr := 'select id,name,sex,address,postcode,birthday from student where id=:w_id';
          --動態(tài)測試,用sqlstr字符串返回結果,用using關鍵詞傳遞參數
          open rc for sqlstr using intid;
          end if;

          return rc;
          end get;

          end pkg_test;

          posted on 2009-01-13 21:55 依然Fantasy 閱讀(1604) 評論(0)  編輯  收藏 所屬分類: Oracle
          主站蜘蛛池模板: 都江堰市| 五常市| 玉屏| 万安县| 苍南县| 元氏县| 潜山县| 鹿邑县| 河北区| 南投县| 鹤岗市| 武强县| 常山县| 湖南省| 临邑县| 香港 | 仪陇县| 宿松县| 垦利县| 庆安县| 阳泉市| 云林县| 双流县| 合川市| 南宁市| 安义县| 澄城县| 廉江市| 拜泉县| 共和县| 汶川县| 沭阳县| 怀化市| 营口市| 新郑市| 陆良县| 宜兰县| 辉南县| 武宁县| 柳江县| 恩施市|