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

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          google了一篇不錯(cuò)的例子,加了點(diǎn)注解,這樣看起來(lái)更方便了:)

          Oracle不像SQLServer那樣在存儲(chǔ)過(guò)程中用Select就可以返回結(jié)果集,而是通過(guò)Out型的參數(shù)進(jìn)行結(jié)果集返回的。實(shí)際上是利用REF CURSOR

          --procedure返回記錄集:

          ----------------------聲明一個(gè)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(只有接口沒(méi)內(nèi)容)

          END pkg_test;

          --------------------------------------------------------


          -----------------聲明Package Body,即上面Package中的內(nèi)容,包括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是個(gè)參數(shù),

          --以下 p_rc是個(gè)REF CURSOR游標(biāo)類型,而且是OUT型參數(shù),即可返回一個(gè)記錄集了。USING p_id就是替換上面SQL中:w_id值拉:)
          OPEN p_rc FOR sqlstr USING p_id; 

          END IF;
          END get;
          END pkg_test;


          --function返回記錄集的例子,原理和上面相同,而是用function的return值來(lái)返回記錄集。

          函數(shù)返回記錄集:
          建立帶ref cursor定義的包和包體及函數(shù):
          CREATE OR REPLACE
          package pkg_test as
          /* 定義ref cursor類型
          不加return類型,為弱類型,允許動(dòng)態(tài)sql查詢,
          否則為強(qiáng)類型,無(wú)法使用動(dòng)態(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
          --函數(shù)體
          function get(intID number) return myrctype is
          rc myrctype; --定義ref cursor變量
          sqlstr varchar2(500);
          begin
          if intID=0 then
          --靜態(tài)測(cè)試,直接用select語(yǔ)句直接返回結(jié)果
          open rc for select id,name,sex,address,postcode,birthday from student;
          else
          --動(dòng)態(tài)sql賦值,用:w_id來(lái)申明該變量從外部獲得
          sqlstr := 'select id,name,sex,address,postcode,birthday from student where id=:w_id';
          --動(dòng)態(tài)測(cè)試,用sqlstr字符串返回結(jié)果,用using關(guān)鍵詞傳遞參數(shù)
          open rc for sqlstr using intid;
          end if;

          return rc;
          end get;

          end pkg_test;

          posted on 2009-01-13 21:55 依然Fantasy 閱讀(1604) 評(píng)論(0)  編輯  收藏 所屬分類: Oracle
          主站蜘蛛池模板: 永新县| 马山县| 措美县| 宣城市| 苗栗县| 什邡市| 乌什县| 河曲县| 汕尾市| 玉溪市| 鲁甸县| 瓮安县| 会泽县| 古田县| 泗阳县| 洞头县| 舒兰市| 延庆县| 申扎县| 贺州市| 遂昌县| 庄浪县| 泰来县| 孟连| 冷水江市| 双鸭山市| 加查县| 辽阳市| 龙州县| 晋中市| 麻栗坡县| 新竹县| 那坡县| 商南县| 东光县| 龙泉市| 阳山县| 梅州市| 平邑县| 方城县| 郁南县|