你目前正处于脱机状态,正在等待 Internet 重新连接

如何通过使用 REF CURSORS ASP 的 Oracle 从检索 ADO 记录集

注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。

点击这里察看该文章的英文版: 255043
不再更新的 KB 内容免责声明
本文介绍那些 Microsoft 不再提供支持的产品。因此本文按“原样”提供,并且不再更新。
概要
与此版本的 Microsoft 数据访问组件 (MDAC) 2.5 Microsoft OLEDB 提供程序的 Oracle 现在支持从通过 REF CURSOR 类型使用的一个 Oracle 过程的 ActiveX 数据对象 (ADO) 记录集返回。对于 Oracle Microsoft OLEDB 提供程序中才支持此功能。Microsoft ODBC Oracle 驱动程序不支持 REF CURSORS 的使用。
更多信息
这一新功能通过以前的提供程序具有一些优点:
  • 在提供程序的早期版本中唯一的方法来从一个 Oracle 过程检索 ADO 记录集是声明 PL/SQL 表的记录集内所返回的每一列。使用新的提供程序只需声明一个 REF CURSOR,它然后处理返回的所有列。

    有关检索通过 PL/SQL 表的 Oracle 过程的其他信息,请单击下面文章编号,以查看 Microsoft 知识库中相应的文章:
    229919如何从 ASP 上使用 ADO 的 Oracle 中检索记录集
  • 在以前版本的提供程序必须指定将返回记录集内的记录的最大数目。当您打开的基于 REF CURSOR ADO 记录集时,该步骤不再是必需的。使用新的提供程序可以只是指定的记录数为 0。例如:

    {call curspkg_join.open_join_cursor1(?, {resultset 0, io_cursor})}					
要在这篇文章中使用该示例,请执行以下操作:
  • 您应该具备与 Microsoft Visual Basic 脚本版 (VBScript)、 ActiveX 数据对象 (ADO) 和活动服务器页面 (ASP)。

  • 如果您创建 Oracle 软件包,您必须了解 Oracle 的程序的语言/结构化查询语言。

  • 若要使用 Oracle 数据库,必须正确配置您的 Internet 信息服务器 (IIS)。

    有关更多的信息请单击下面文章编号,以查看 Microsoft 知识库中相应的文章:
    193225如何配置 IIS 以从 ASP 和 ADO 连接到 Oracle

示例代码

下面的代码示例演示如何从一个 REF CURSOR 通过一个 Oracle 过程检索 ADO 记录集,然后显示 ASP 页上的数据。您必须修改在 ASP 代码中用于连接到 Oracle 数据库 OLEDB 连接字符串。

  1. 在运行任何 ASP 代码之前在 Oracle 服务器上创建以下的 Oracle 软件包。此包使用 Oracle scott/对比色在架构中定义一些表。使用默认的 Oracle 安装安装 Oracle scott/对比色架构。如果不存在此架构,您必须运行下列的表脚本并插入到表的一些信息:

    表脚本
    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

警告:本文已自动翻译

属性

文章 ID:255043 - 上次审阅时间:05/17/2007 10:33:26 - 修订版本: 3.3

Microsoft OLE DB Provider for Oracle Server 1.0

  • kbmt kbhowto kboracle KB255043 KbMtzh
反馈