Como recuperar o Recordset ADO do Oracle por ASP usando o REF CURSORS

Traduções deste artigo Traduções deste artigo
ID do artigo: 255043 - Exibir os produtos aos quais esse artigo se aplica.
Expandir tudo | Recolher tudo

Neste artigo

Sumário

Com o lançamento do Microsoft Data Access Components (MDAC) 2.5, o provedor Microsoft OLEDB para Oracle agora oferece suporte o retorno de conjuntos de registros de ActiveX Data Objects (ADO) de um procedimento Oracle através do uso de um tipo de REF CURSOR. Essa funcionalidade só é suportada no provedor Microsoft OLEDB para Oracle. O Microsoft ODBC para driver Oracle não suporta o uso de REF CURSORS.

Mais Informações

Essa nova funcionalidade tem algumas vantagens sobre o provedor anterior:
  • Nas versões anteriores do provedor a única maneira para recuperar um conjunto de registros ADO a partir de um procedimento Oracle era declarar uma tabela PL/SQL para cada coluna que foi sendo retornada no conjunto de registros. Com o provedor novo que você só precisa declarar um REF CURSOR, que manipula o retorno de todas as colunas.

    Para obter informações adicionais na recuperação de procedimentos do Oracle por meio de tabelas PL/SQL, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
    229919Como recuperar um conjunto de registros do Oracle usando ADO em ASP
  • Na versão anterior do provedor precisava de especificar o número máximo de registros que retornaria no conjunto de registros. Quando você abre um recordset ADO que se baseia em um CURSOR de REF, essa etapa não é mais necessária. Com o novo provedor, você pode apenas especificar 0 para o número de registros. Por exemplo:

    {call curspkg_join.open_join_cursor1(?, {resultset 0, io_cursor})}
    					
Para usar o exemplo neste artigo:
  • Você deve ser eficiente com o Microsoft Visual Basic Scripting Edition (VBScript), ActiveX Data Objects (ADO) e Active Server Pages (ASP).

  • Se você estará criando pacotes Oracle, você deve compreender procedimentos idioma/Structured Query Language do Oracle.

  • O Internet Information Server (IIS) deve ser configurado corretamente para trabalhar com o banco de dados Oracle.

    Para obter informações adicionais, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
    193225Como configurar o IIS para conectar-se ao Oracle a partir de ASP e ADO

Código de exemplo

O seguinte código de exemplo demonstra como recuperar um conjunto de registros ADO a partir de um procedimento Oracle por meio de um REF CURSOR e exibe os dados em uma página ASP. Você deve modificar a seqüência de conexão OLEDB usada no código ASP para se conectar ao seu banco de dados Oracle.

  1. Crie o pacote Oracle seguinte no servidor Oracle antes de executar qualquer código ASP. Esse pacote usa algumas tabelas definidas no esquema Oracle Scott/Tiger. O esquema do Oracle Scott/Tiger é instalado com a instalação padrão do Oracle. Se este esquema não existir, você deve executar os seguintes scripts de tabela e inserir algumas informações nas tabelas:

    scripts de tabela
    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)
    );
    						

    scripts de pacote
    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. A seguir é o script ASP que chama o procedimento 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>
    						

Referências

Para obter mais informações sobre o MDAC, consulte o seguinte site:
http://msdn2.microsoft.com/en-us/data/aa937695.aspx
Documentação Oracle8 Enterprise Edition

Propriedades

ID do artigo: 255043 - Última revisão: quinta-feira, 17 de maio de 2007 - Revisão: 3.3
A informação contida neste artigo aplica-se a:
  • Microsoft OLE DB Provider for Oracle Server 1.0
Palavras-chave: 
kbmt kbhowto kboracle KB255043 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 255043
Aviso de Isenção de Responsabilidade sobre Conteúdo do KB Aposentado
Este artigo trata de produtos para os quais a Microsoft não mais oferece suporte. Por esta razão, este artigo é oferecido "como está" e não será mais atualizado.

Submeter comentários

 

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