Estás trabajando sin conexión, espera a que vuelva la conexión a Internet

Cómo recuperar el Recordset de ADO de Oracle mediante ASP utilizando tipos REF cursor

IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.

Haga clic aquí para ver el artículo original (en inglés): 255043
Renuncia a responsabilidad de los contenidos de la KB sobre productos a los que ya no se ofrece asistencia alguna
El presente artículo se escribió para productos para los que Microsoft ya no ofrece soporte técnico. Por tanto, el presente artículo se ofrece "tal cual" y no será actualizado.
Resumen
Gracias a la versión de Microsoft Data Access Components (MDAC) 2.5, el proveedor Microsoft OLEDB para Oracle admite la devolución de conjuntos de registros de ActiveX Data Objects (ADO) desde un procedimiento de Oracle mediante el uso de un tipo de REF CURSOR. Esta funcionalidad sólo se admite en el proveedor Microsoft OLEDB para Oracle. El Microsoft controlador ODBC para Oracle no admite el uso de cursores REF cursor.
Más información
Esta nueva funcionalidad tiene algunas ventajas sobre el proveedor anterior:
  • En versiones anteriores del proveedor de la única forma para recuperar un conjunto de registros ADO de un procedimiento de Oracle era declarar una tabla de PL/SQL para cada columna que se va a devolver en el conjunto de registros. Con el nuevo proveedor que sólo es necesario declarar uno REF CURSOR, a continuación, que controla la devolución de todas las columnas.

    Para obtener información adicional sobre la recuperación procedimientos de Oracle a través de las tablas de PL/SQL, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
    229919Cómo recuperar un conjunto de registros de Oracle mediante ADO en ASP
  • En la versión anterior del proveedor tenía que especificar el número máximo de registros que devolvería el conjunto de registros. Cuando abre un objeto recordset de ADO que se basa en un REF CURSOR, ese paso ya no es necesario. Sólo se puede especificar 0 para el número de registros con el nuevo proveedor. Por ejemplo:

    {call curspkg_join.open_join_cursor1(?, {resultset 0, io_cursor})}					
Para utilizar el ejemplo en este artículo:
  • Debe ser experto con Microsoft Visual Basic Scripting Edition (VBScript), ActiveX Data Objects (ADO) y Active Server (ASP).

  • Si va a crear paquetes de Oracle, debe comprender lenguaje de consulta estructurada y lenguaje procedimientos de Oracle.

  • Su Internet Information Server (IIS) debe configurarse correctamente para trabajar con la base de datos Oracle.

    Para obtener información adicional, haga clic en el número de artículo siguiente para ver el artículo en Microsoft Knowledge Base:
    193225Cómo conectarse a Oracle desde ASP y ADO

Código de ejemplo

En el siguiente ejemplo de código muestra cómo recuperar un conjunto de registros ADO desde un procedimiento de Oracle a través de un REF CURSOR y, a continuación, muestra los datos en una página ASP. Debe modificar la cadena de conexión OLEDB utilizada en el código ASP para conectarse a la base de datos Oracle.

  1. Cree el siguiente paquete de Oracle en el servidor Oracle antes de ejecutar el código de ASP. Este paquete utiliza algunas tablas definidas en el esquema Scott/Tiger de Oracle. El esquema Scott/Tiger de Oracle se instala con la instalación de Oracle predeterminada. Si este esquema no existe, debe ejecutar las siguientes secuencias de comandos tabla y insertar información en las tablas:

    secuencias de comandos de tabla
    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));						

    secuencias de comandos de paquete
    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. Siguiente es la secuencia de comandos ASP que llama al procedimiento anterior:
    <%@ 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>						
Referencias
Para obtener más información acerca de MDAC, consulte el siguiente sitio Web: Documentación Oracle8 Enterprise Edition
REF_CURSOR

Advertencia: este artículo se tradujo automáticamente

Propiedades

Id. de artículo: 255043 - Última revisión: 05/17/2007 10:33:26 - Revisión: 3.3

Microsoft OLE DB Provider for Oracle Server 1.0

  • kbmt kbhowto kboracle KB255043 KbMtes
Comentarios