国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

JDBC里取得Oracle存儲過程動態結果集

2019-11-18 12:37:28
字體:
來源:轉載
供稿:網友

  1. 關于Oracle和結果集
  
  其實在大多數情況下,我們并不需要從oracle存儲過程里返回一個或多個結果集,除非迫不得已。
  
  假如大家用過MS SQL Server或Sybase SQL Server,那么從存儲過程返回一個動態的結果集是一件非常輕易的事情,只要在存儲過程結束時寫上
  
  “select column1,column2,.... from table_list where condition“
  
  就可以了。
  
  但在Oracle中不能這樣做. 我們必須使用Oracle Cursor.
  
  在Oracle PL/SQL中,Cursor用來返回一行或多行記錄,借助Cursor,我們可以從結果集中取得所有記錄.
  
  Cursor并不難,但是要從Oracle存儲過程中返回結果集, 就需要用到Cursor變量,Cursor變量Oracle PL/SQL的類型是REF CURSOR, 我們只要定義了REF CURSOR 類型就可以使用Cursor變量. 比如我們可以這樣定義:
  TYPE ref_cursor IS REF CURSOR;
  
  了解了Cursor以及Cursor變量,下面就介紹如何使用Cursor變量給JDBC返回結果集.
  
  2. 定義表結構
  
  在以下例子里,我們要用到一張表Hotline.
  
  Create table hotline(country varchar2(50),pno varchar2(50));
  
  3. 定義存儲過程
  
  create or replace package PKG_HOTLINE istype HotlineCursorType is REF CURSOR;
  function getHotline return HotlineCursorType;
  end;
  create or replace package body PKG_HOTLINE isfunction getHotline return HotlineCursorType ishotlineCursor HotlineCursorType;
  beginopen hotlineCursor for select * from hotline;
  return hotlineCursor;
  end;
  end;
  
  在這個存儲過程里,我們定義了HotlineCursorType 類型,并且在存儲過程中簡單地查找所有的記錄并返回HotlineCursorType.
  
  4. 測試存儲過程
  
  在Oracle SQL/Plus里登陸到數據庫. 按以下輸入就看到返回的結果集.
  
  SQL> var rs refcursor;SQL> exec :rs := PKG_HOTLINE.getHotline;SQL> PRint rs;
  
  5. java調用
  
  簡單地寫一個Java Class.
  
  ....public void openCursor(){Connection conn = null;ResultSet rs = null;
  CallableStatement stmt = null;
  String sql = “{? = call PKG_HOTLINE.getHotline()}“;
  try{conn = getConnection();stmt = conn.prepareCall(sql);
  stmt.registerOutParameter(1,OracleTypes.CURSOR);
  stmt.execute();
  rs = ((OracleCallableStatement)stmt).getCursor(1);
  while(rs.next()){String country = rs.getString(1);
  String pno = rs.getString(2);
  System.out.println(“country:“+country+“pno:”+pno);
  }}catch(Exception ex){ex.printStackTrace();
  }finally{closeConnection(conn,rs,stmt);
  }}.....
  
  好了,大功告成.

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 苏州市| 定边县| 陇南市| 汝州市| 新源县| 武定县| 伽师县| 唐山市| 梅河口市| 安吉县| 玉溪市| 赫章县| 兴义市| 建瓯市| 饶河县| 乐东| 红原县| 长寿区| 金昌市| 东光县| 宁明县| 房产| 义乌市| 安吉县| 来安县| 安图县| 涞源县| 汾西县| 静乐县| 化德县| 嘉黎县| 武冈市| 长乐市| 噶尔县| 乳山市| 潼关县| 花莲市| 灌云县| 永修县| 突泉县| 河池市|