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

重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。

按一下這裡查看此文章的英文版本:255043
依現狀不再更新的知識庫內容免責聲明
本文旨在說明 Microsoft 不再提供支援的產品。因此,本文係依「現狀」提供,不會再更新。
結論
使用發行版本的 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 ASProcedure 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 的詳細資訊,請參閱下列網站: Oracle8 企業版文件
REF_CURSOR

警告:本文為自動翻譯

內容

文章識別碼:255043 - 最後檢閱時間:05/17/2007 10:33:26 - 修訂: 3.3

Microsoft OLE DB Provider for Oracle Server 1.0

  • kbmt kbhowto kboracle KB255043 KbMtzh
意見反應