如何從 Oracle 透過 ASP 使用 REF 游標擷取的 ADO 資料錄集

文章翻譯 文章翻譯
文章編號: 255043 - 檢視此文章適用的產品。
全部展開 | 全部摺疊

在此頁中

結論

使用發行版本的 Microsoft 資料存取元件 (MDAC) 2.5 Oracle Microsoft OLEDB 提供者現在支援從 Oracle 程序透過 REF CURSOR 型別使用的 ActiveX 資料物件 (ADO) 資料錄集傳回。在 Oracle Microsoft OLEDB 提供者中才支援這項功能。Microsoft ODBC Oracle 驅動程式不支援使用 REF 游標。

其他相關資訊

這項新功能的一些好處高於上一個提供者:
  • 在舊版的提供者中唯一的方式擷取從 Oracle 程序的 ADO 資料錄集是宣告為每個已在資料錄集中所傳回的資料行的 PL/SQL 資料表。與新的提供者只需要宣告一個 REF CURSOR 時,可再處理所有資料行的傳回。

    如需上擷取 Oracle 透過 PL/SQL 資料表的程序的詳細資訊,按一下下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項:
    229919如何從 ASP 上使用 ADO 的 Oracle 擷取資料錄集
  • 在前一版的提供者,您必須指定會傳回資料錄集的記錄最大數目。當您開啟 ADO 資料錄集為基礎 REF CURSOR 時,該步驟已經不再需要。您只是可以使用新的提供者指定的記錄筆數的 0。例如:

    {call curspkg_join.open_join_cursor1(?, {resultset 0, io_cursor})}
    					
若要使用本文中的範例:
  • 您應該精通 Microsoft Visual Basic 指令碼版 (VBScript)、 ActiveX 資料物件 (ADO) 與動態伺服器網頁 (ASP)。

  • 如果您將建立 Oracle 套件,您必須了解 Oracle 的程序性語言/結構化查詢語言。

  • 必須正確設定網際網路資訊伺服器 (IIS),才能使用 Oracle 資料庫。

    如需詳細資訊按一下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項:
    193225如何將 IIS 設定為從 ASP 和 ADO 連線到 Oracle

範例程式碼

下列範例程式碼示範如何從 Oracle 程序透過一個 REF] CURSOR 擷取 ADO 資料錄集,並在 ASP 網頁上顯示資料。您必須修改在 ASP 程式碼中用來連線到 Oracle 資料庫的 OLEDB 連接字串。

  1. 在 Oracle 伺服器執行任何 ASP 程式碼之前,先上建立下列的 Oracle 封裝。此套件使用 Oracle 陳俊銘虎結構描述中定義某些資料表。Oracle 陳俊銘虎結構描述是與預設 Oracle 安裝一起安裝。如果這個結構描述不存在,必須執行下列資料表指令碼,並在資料表中插入一些資訊:

    資料表指令碼
    CREATE TABLE DEPT
    (DEPTNO NUMBER(2,0) NOT NULL, 
    DNAME VARCHAR2(14) NULL, 
    LOC VARCHAR2(13) NULL,
    PRIMARY KEY (DEPTNO)
    );
    
    CREATE TABLE EMP
    (EMPNO NUMBER(4,0) NOT NULL, 
    ENAME VARCHAR2(10) NULL, 
    JOB VARCHAR2(9) NULL, 
    MGR NUMBER(4,0) NULL, 
    HIREDATE DATE NULL, 
    SAL NUMBER(7,2) NULL, 
    COMM NUMBER(7,2) NULL, 
    DEPTNO NUMBER(2,0) NULL,
    FOREIGN KEY (DEPTNO) REFERENCES DEPT(DEPTNO),  
    PRIMARY KEY (EMPNO)
    );
    						

    套件指令碼
    CREATE OR REPLACE PACKAGE curspkg_join AS 
    	TYPE t_cursor IS REF CURSOR ; 
    	Procedure open_join_cursor1 (n_EMPNO IN NUMBER, io_cursor IN OUT t_cursor); 
    END curspkg_join;
    / 
    
    CREATE OR REPLACE PACKAGE BODY curspkg_join AS
    Procedure open_join_cursor1 (n_EMPNO IN NUMBER, io_cursor IN OUT t_cursor) 
    IS 
    	v_cursor t_cursor; 
    BEGIN 
    	IF n_EMPNO <> 0 
    	THEN
    		OPEN v_cursor FOR 
    		SELECT EMP.EMPNO, EMP.ENAME, DEPT.DEPTNO, DEPT.DNAME 
    			FROM EMP, DEPT 
    			WHERE EMP.DEPTNO = DEPT.DEPTNO 
    			AND EMP.EMPNO = n_EMPNO;
    
    	ELSE 
    		OPEN v_cursor FOR 
    		SELECT EMP.EMPNO, EMP.ENAME, DEPT.DEPTNO, DEPT.DNAME 
    			FROM EMP, DEPT 
    			WHERE EMP.DEPTNO = DEPT.DEPTNO;
    
    	END IF;
    	io_cursor := v_cursor; 
    END open_join_cursor1; 
    END curspkg_join;
    / 
    						
  2. 下列是 ASP 指令碼中呼叫了前述程序:
    <%@ Language=VBScript %>
    <HTML>
    <HEAD>
    <META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
    </HEAD>
    <BODY>
    <P>
    <%
    	Const CONNECT = "Provider=MSDAORA.1;Data Source=your_tns_alias_name;User ID=scott;Password=tiger"
    		
    	Dim cn, rs, cmd, param
    	Dim SQL
    
    	set cn = Server.CreateObject( "ADODB.Connection" )
    	cn.Open CONNECT	
    
    	SQL = "{call curspkg_join.open_join_cursor1(?, {resultset 0, io_cursor})}"
    	set cmd = server.CreateObject ("ADODB.Command")
    	with cmd
    		set .ActiveConnection	= cn
    	    .CommandText			= SQL
    	    .CommandType			= 1		'adCmdText
    	    'Pass in 0 to retrieve all of the records
    	    set param = .CreateParameter("id", 131 , 1 , , 0)  '<<131=adNumeric, 1=adParamInput
    	    .Parameters.Append param
    	end with
    					
    	set rs = server.CreateObject ( "ADODB.Recordset" ) 
    	set rs = cmd.execute
    		    
    	%>
    	<TABLE WIDTH="80%" ALIGN=center BORDER=1 CELLSPACING=3 CELLPADDING=3>
    	<%
    	Response.Write ("<TR bgcolor=Gray>")
    	For i = 0 To rs.Fields.Count - 1
    		Response.Write ("<TD>" & rs.Fields(i).Name & "</TD>")
    	Next
    	Response.Write ("</TR>")
    	Do until rs.EOF
    		response.write ("<TR>")
    		for i = 0 to rs.Fields.Count - 1
    			If IsNull(rs(i).value) then 
    				Response.Write ("<TD> NULL </TD>")
    			else 
    				Response.Write ("<TD>" & rs(i).value & "</TD>")
    			end if 
    		next 
    		rs.MoveNext
    		response.write ("</TR>")
    	loop
    	%>
    	</TABLE>
    	<%
    	Set cmd = Nothing
    	Set param = Nothing
    	rs.close
    	Set rs = Nothing
    	cn.close
    	Set cn = Nothing
    %>
    </P>
    </BODY>
    </HTML>
    						

?考

如需有關 MDAC 的詳細資訊,請參閱下列網站:
http://msdn2.microsoft.com/en-us/data/aa937695.aspx
Oracle8 企業版文件

屬性

文章編號: 255043 - 上次校閱: 2007年5月17日 - 版次: 3.3
這篇文章中的資訊適用於:
  • Microsoft OLE DB Provider for Oracle Server 1.0
關鍵字:?
kbmt kbhowto kboracle KB255043 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:255043
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。
依現狀不再更新的知識庫內容免責聲明
本文旨在說明 Microsoft 不再提供支援的產品。因此,本文係依「現狀」提供,不會再更新。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com