使用OLE DB和ADO調用返回記錄集的Oracle存儲過程_第1頁
使用OLE DB和ADO調用返回記錄集的Oracle存儲過程_第2頁
使用OLE DB和ADO調用返回記錄集的Oracle存儲過程_第3頁
使用OLE DB和ADO調用返回記錄集的Oracle存儲過程_第4頁
全文預覽已結束

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、使用OLE DB和ADO調用返回記錄集的Oracle存儲過程         摘要  OLE DB是建立在ODBC成功基礎上的一種開放規范,它為訪問和操縱不同類型數據提供開放的標準。ADO是OLD DB的一個消費者,它提供了對OLE DB數據源應用級的訪問功能。在應用程序中使用OLE DB和ADO,可以高效地調用返回記錄集的Oracle存儲過程。關鍵字   OLE DB   ADO   存儲過程   記錄集1 

2、60; 前言   在基于Oracle數據庫的ADO應用程序的開發過程中,為了提高執行速度和降低網絡流量,往往要在應用程序中調用Oracle數據庫服務器端的存儲過程。有的存儲過程需要返回多行的記錄集。這種情況下,在應用程序中調用返回記錄集的存儲過程存在一定的難度。本文介紹如何使用OLE DB和ADO調用返回記錄集的Oracle存儲過程。2   OLE DB和ADO的關系2.1 OLE DB簡介OLE DB建立在ODBC成功基礎上的開放的規范,它為訪問和操縱不同類型數據提供開放的標準。OLE DB定義了一個COM接口集合,它封裝了各種數據庫管理系統服務。這些

3、接口允許創建實現這些服務的軟件組件。OLE DB組件包括數據提供者(存儲和發布數據)、數據消費者(使用數據)和服務組件(處理和傳輸數據)。OLE DB的設計是以消費者和提供者概念為中心。OLE DB消費者表示傳統的客戶方,提供者將數據以表格形式傳遞給消費者。OLE DB的Oracle提供者(OraOLEDB)可使OLE DB消費者高效地訪問Oracle數據源。圖1給出OLE DB的系統圖示。OLE DB數據提供者將數據從數據源傳遞給消費者。在標準接口的基礎上,OLE DB消費者能夠訪問來自提供者的數據。因為有COM組件,消費者可以用任何支持COM的編程語言訪問數據。2.2  

4、; ADO對象模在ADO對象模型中,Connection、Command和Recordset對象是三個主要的對象。Connection對象表示對遠程數據的連接。Connection對象可與Command對象或Recordset對象關聯。Command對象定義了對數據源執行的指定命令。Command對象可以用來執行命令和參數化的SQL語句,可以用于SQL語句和返回記錄集的SQL查詢。Command對象既可以使用一個活動的Connection對象,也可以創建它自己到目標數據源的連接。Command對象包含一個Parameters集合,在該集合中每一個Parameter對象表示Command對象使用

5、的參數。Command對象執行參數化的SQL語句時,每一個Parameter對象表示SQL語句中的一個參數。Recordset對象表示的來自基本表或命令執行結果的記錄全集。Recordset對象既可以使用一個活動的Connection對象,也可以創建它自己到目標數據源的連接。Recordset對象允許查詢和修改數據。每一個Recordset包含一個Field對象集合,其中,每個Field對象表示Recordset中一個數據列。2.3   ADO和OLE DB的關系OLE DB是系統級編程接口,ADO是應用軟件級編程接口。ADO是OLE DB的一個消費者,它提供了對OLE D

6、B數據源應用級的訪問功能。ADO為OLE DB提供了一個易于使用的應用級接口。ADO允許用戶編寫通過OLE DB提供者對數據庫服務器中的數據進行訪問和操作的應用程序。其主要的優點是易于使用、高速度、低內存和占用較少的磁盤空間。ADO和OLE DB的關系如圖2所示:3  Oracle中返回記錄集的存儲過程的定義   在Oracle存儲過程中,通過定義類型為REF CURSOR(游標指針)的傳出參數,可以返回記錄集。OLE DB允許消費者執行帶REF CURSOR類型參數的PL/SQL存儲過程,或者執行返回REF CURSOR的存儲函數。返回記錄集的存儲過程或函數必須

7、定義在程序包里。包是Oracle數據庫的一種對象,它可以將數據類型、存儲過程、函數、變量和常量封裝在一起。包在結構上分為包頭和包體兩部分,這兩部分要分別建立。包頭用來定義可被外部引用的元素;包體定義實際代碼。使用程序包定義返回記錄集的存儲過程時,需要在包頭中預定義自己的REF CURSOR類型。在程序包體中,存儲過程或函數須使用預定義的游標類型。另外,在一個存儲過程或函數中,可以定義多個REF CURSOR類型的參數以返回多個記錄集。以下以職工表emp為例,介紹如何定義返回記錄集的Oracle存儲過程,emp表的定義CREATE TABLE emp(empno   NUMB

8、ER(4) NOT NULL,  -職工編號ename   VARCHAR2(10),    -職工姓名hiredate  DATE,       -雇傭日期sal   NUMBER(7,2),    -工資deptno   NUMBER(2);    -所屬部門編號下面給出返回記錄集的Oracle存儲過程和存儲函數的示例程序包頭和包體,其中存儲過程GetEmpRec

9、ords含有兩個REF CURSOR類型的傳出參數,返回兩個記錄集,存儲函數GetDept的返回值類型為REF CURSOR,返回一個記錄集。 -定義一個名為Employees的程序包頭CREATE OR REPLACE PACKAGE Employees AS       TYPE empcur IS REF CURSOR;           -empcur為自定義REF CURSOR類型-聲明一個存儲過程GetEmpRecords  PRO

10、CEDURE GetEmpRecords(p_cursor OUT empcur,            q_cursor OUT empcur,            indeptno IN NUMBER,            p_errorcode OUT NUM

11、BER);-聲明一個存儲函數GetDept  FUNCTION GetDept(inempno IN NUMBER,         p_errorcode OUT NUMBER)       RETURN empcur;END Employees; -程序包頭定義結束                -定義E

12、mployees的程序包體-定義存儲過程GetEmpRecordsCREATE OR REPLACE PACKAGE BODY Employees AS   PROCEDURE GetEmpRecords(p_cursor OUT empcur,  q_cursor OUT empcur,       indeptno IN NUMBER, p_errorcode OUT NUMBER) IS  BEGIN     p_errorcode := 0; &#

13、160; - p_errorcode為錯誤編號-打開游標變量p_cursor,查詢所屬部門編號-為indeptno的所有職工的信息  OPEN p_cursor FOR      SELECT * FROM emp  WHERE deptno = indeptno  ORDER BY empno;  -打開游標變量q_cursor,查詢所屬部門編號-為indeptno的所有職工的編號信息   OPEN q_cursor FOR   SELECT empno  FRO

14、M emp   WHERE deptno = indeptno   ORDER BY empno;   EXCEPTION        -例外處理   WHEN OTHERS THEN     p_errorcode:= SQLCODE;   END GetEmpRecords; -存儲過程GetEmpRecords定義結束-定義存儲函數GetDept FUNCTION GetDept

15、(inempno IN NUMBER,          p_errorcode OUT NUMBER)  RETURN empcur IS  p_cursor empcur;  -返回值 BEGIN   p_errorcode := 0;  -查詢職工編號為inempno的職工的所屬部門編號   OPEN p_cursor FOR  SELECT deptno  FROM emp WHERE empno

16、= inempno;     RETURN (p_cursor);     EXCEPTION     WHEN OTHERS THEN     p_errorcode:= SQLCODE;  END GetDept;   END Employees; -程序包體定義結束4   利用ADO調用返回記錄集的Oracle存儲過程使用OLE DB和ADO調用返回記錄集的Oracle存儲過程,在定義ADO對象和設置參數時,需要特定的設置。         參考文獻1(美)W

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論