亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > Oracle > 正文

oracle調用存儲過程和函數返回結果集

2024-08-29 13:54:24
字體:
來源:轉載
供稿:網友
在程序開發中,常用到返回結果集的存儲過程,這個在MySQL和sql server 里比較好處理,直接返回查詢結果就可以了,但在Oracle里面 要 out 出去,就多了一個步驟,對于不熟悉的兄弟們還得出上一頭汗:),這里我簡單介紹一下,以供參考,   1  定義包      oracle 返回的結果集需要自定義一個 CURSOR (游標變量)性質的變量,這個要在包頭定義,所以要建立一個包,如下是包頭

Pl/sql代碼

CREATE OR REPLACE PACKAGE PAK_rstest

  IS

    TYPE   retcursor    IS   REF   CURSOR;

   PROCEDURE pro_read

     (

       outcurse  IN OUT retcursor

     );

   END; -- Package spec

     上面是建立了一個名稱為PAK_rstest的包頭,里面定義了一個CURSOR 類型,類型名為retcursor ,有了這個定義我們就可以用他來返回結果集了,比如該包里面的 pro_read 過程就是 一個返回結果集的過程,下面是他的包體,

Pl/sql代碼

CREATE OR REPLACE PACKAGE BODY PAK_rstest IS

   PROCEDURE pro_read

   (

       outcurse  IN OUT retcursor

   )

   IS

   begin

        OPEN outcurse FOR

         select * from tbl_test

                where rownum<6;

        return;

   end;

 

END;

    這樣就定義好了一個包,這個包里面有個返回結果集的過程 pro_read  

 2 在程序里面調用,     下面就是如果在程序里面調用了,這里用java為例子簡單介紹一下,     假設你現在已經有一個Connection  conn 對象連接上了數據庫(如何連接數據庫我這里就不詳細說了),      則用下面的代碼調用過程,

Pl/sql代碼

 

if(conn !=null){

    String sqlstr = "{call  PAK_SMS2_ROUTE.MO_ISSUE(?)}";

     CallableStatement cstmt = conn.prepareCall(sqlstr);

     cstmt.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR); //outcurse

     cstmt.executeUpdate();

     ResultSet rs = (ResultSet) cstmt.getObject(1); // 這里吧信息已經讀入rs結果集里面,剩下的大家都熟悉了吧

   while (rs.next()) {

        System.out.println(rs.getString("s_date1")); //tbl_test 表里的字段名稱或是結果集的列名稱

     System.out.println(rs.getString("s_date2"));

      }   

         conn.close();

         conn = null;       

}

 

  好了到這里就可以看到返回的結果集內容了,是不是比較簡單啊,:)   Oracle 存儲過程返回結果集:

過程返回記錄集代碼

 

CREATE OR REPLACE PACKAGE pkg_test

AS

    TYPE myrctype IS REF CURSOR;

 

    PROCEDURE get (p_id NUMBER, p_rc OUT myrctype);

END pkg_test;

 

 

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';

          OPEN p_rc FOR sqlstr USING p_id;

       END IF;

    END get;

END pkg_test;  

 

 

函數返回記錄集:建立帶ref cursor定義的包和包體及函數:

 

函數返回記錄集代碼

CREATE OR REPLACE

package pkg_test as

/* 定義ref cursor類型

    不加return類型,為弱類型,允許動態sql查詢,

    否則為強類型,無法使用動態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

         --靜態測試,直接用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調用oracle函數返回游標處理代碼

 

CallableStatement cstmt = null;

ResultSet rs = null;

try {

String callSql = "{? = call AAAAA(?)}";

cstmt = conn.prepareCall(callSql);

   

cstmt.setString(2, "userName");

cstmt.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR);

cstmt.execute();

rs = (ResultSet) cstmt.getObject(1);

if (rs != null) {

       System.out.print("usercd");

       System.out.print("userName");               

       System.out.println("EMAIL");

       while (rs.next()) {       

    System.out.print(rs.getString(1)+"   ");

    System.out.print(rs.getString(2)+"   ");               

    System.out.println(rs.getString(3));

       }   

}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲一区二区三区777| 97国产suv精品一区二区62| 日韩中文字幕在线| 91亚洲精品久久久久久久久久久久| 亲爱的老师9免费观看全集电视剧| 国产99视频在线观看| 欧美黑人又粗大| 综合激情国产一区| 国产精品com| 成人a视频在线观看| 久久亚洲综合国产精品99麻豆精品福利| 久久精品国产一区二区电影| 久久久噜噜噜久噜久久| 日韩美女视频中文字幕| 亚洲欧美激情四射在线日| 亚洲在线第一页| 欧美中文字幕在线视频| 91中文字幕在线观看| 欧美精品在线看| 国产精品国产自产拍高清av水多| 欧美在线日韩在线| 在线日韩中文字幕| 欧美激情视频一区二区三区不卡| 日韩在线播放视频| 久久久天堂国产精品女人| 久久精品这里热有精品| 狠狠色狠色综合曰曰| 欧美麻豆久久久久久中文| 欧美一级片久久久久久久| 日韩a**中文字幕| 久久综合伊人77777尤物| 欧美第一黄网免费网站| 欧美丰满少妇xxxxx| 国产欧美久久一区二区| 九九热99久久久国产盗摄| 国产欧美在线观看| 国产精品久久久av久久久| 欧美日韩人人澡狠狠躁视频| 精品久久久久久中文字幕一区奶水| 精品网站999www| 日韩成人网免费视频| 亚洲一区二区三区成人在线视频精品| 亚洲精品一区二区三区不| 在线播放国产精品| 国产精品国产三级国产aⅴ9色| 一区二区三区四区在线观看视频| 91国产美女在线观看| 亚洲免费伊人电影在线观看av| 成人美女av在线直播| 色婷婷**av毛片一区| 国产在线精品一区免费香蕉| 91久久国产精品| 国产一区二区在线播放| 久久久久久国产精品| 亚洲a∨日韩av高清在线观看| 精品久久久在线观看| 国产成人精品一区| 国产v综合v亚洲欧美久久| 日韩av在线免播放器| 影音先锋日韩有码| 欧美激情18p| 欧美做爰性生交视频| 久久精品中文字幕| 久久av在线播放| 日本成人黄色片| 少妇高潮久久77777| 国产精品久久婷婷六月丁香| 亚洲一区二区日本| 欧美日韩一区二区免费视频| 91极品视频在线| 成人精品久久一区二区三区| 久久精品国产亚洲精品2020| 91精品国产免费久久久久久| 国产不卡av在线免费观看| 欧美日韩国产成人在线观看| 亚洲日本中文字幕免费在线不卡| 欧美大成色www永久网站婷| 亚洲男人天堂古典| 亚洲色图18p| 国产精品久久久久久久久| 亚洲欧美日韩一区二区在线| 亚洲tv在线观看| 91亚洲永久免费精品| 中文字幕在线看视频国产欧美在线看完整| 日韩av在线高清| 国产精品久久久久久久久久免费| 黄色一区二区在线观看| 琪琪第一精品导航| 国内精品久久久久伊人av| 国产精品日韩精品| 欧美理论在线观看| 国产欧美日韩精品丝袜高跟鞋| 久久综合色影院| 不卡中文字幕av| 欧美激情第6页| 国产成人av在线播放| 国产伦精品一区二区三区精品视频| 国产99久久久欧美黑人| 日本久久久久久久| 国产色婷婷国产综合在线理论片a| 日韩在线精品视频| 亚洲欧美日韩直播| 国产亚洲精品va在线观看| 日韩美女福利视频| 97精品欧美一区二区三区| 亚洲成人av片| 国产美女精品视频免费观看| 最近2019年中文视频免费在线观看| 欧美日韩国产专区| 91久久久久久久久久| 国产精品久久久久久久久久久久| 色香阁99久久精品久久久| 狠狠操狠狠色综合网| 精品国产电影一区| 亚洲深夜福利在线| 九九久久精品一区| 亚洲精品一区二区三区不| 亚洲国产日韩一区| 日日噜噜噜夜夜爽亚洲精品| 成人妇女免费播放久久久| 亚洲午夜精品久久久久久性色| 日韩成人在线视频网站| 国产精品久久久久久久久久99| 日韩福利视频在线观看| 亚洲理论在线a中文字幕| 久久精品国产一区二区三区| 日韩av在线网| 国产精品久久一| 亚洲激情免费观看| 国产精品久久久999| 亚洲精品乱码久久久久久金桔影视| 亚洲在线一区二区| 日韩专区中文字幕| 亚洲精品网站在线播放gif| 国产精品私拍pans大尺度在线| 精品亚洲国产成av人片传媒| 91国偷自产一区二区三区的观看方式| 国产精品一区二区久久精品| 国内精久久久久久久久久人| 久久精品一偷一偷国产| 久久久精品视频成人| 国产日产欧美精品| 黑人巨大精品欧美一区二区免费| 久久在精品线影院精品国产| 国产一区二区三区在线视频| 国产精品96久久久久久| 成人淫片在线看| 亚洲人成电影在线播放| 欧美午夜xxx| 91精品国产精品| 浅井舞香一区二区| 国产精品揄拍500视频| 欧美激情手机在线视频| 91精品久久久久久久久中文字幕| 亚洲欧美三级在线| 欧美日韩另类视频| 亚洲精品成a人在线观看| 久久亚洲精品中文字幕冲田杏梨| 国精产品一区一区三区有限在线| 久久国产精品久久久| 欧美大人香蕉在线| 中文字幕在线成人| 全球成人中文在线| 国产精品狼人色视频一区|