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

Seleccione idioma Seleccione idioma
Id. de artículo: 255043 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

En esta página

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 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. 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:
http://msdn2.microsoft.com/en-us/data/aa937695.aspx
Documentación Oracle8 Enterprise Edition

Propiedades

Id. de artículo: 255043 - Última revisión: jueves, 17 de mayo de 2007 - Versión: 3.3
La información de este artículo se refiere a:
  • Microsoft OLE DB Provider for Oracle Server 1.0
Palabras clave: 
kbmt kbhowto kboracle KB255043 KbMtes
Traducción automática
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.

Enviar comentarios

 

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