Como obter o conjunto de registos ADO do Oracle através do ASP utilizar CURSORES REF

Traduções de Artigos Traduções de Artigos
Artigo: 255043 - Ver produtos para os quais este artigo se aplica.
Expandir tudo | Reduzir tudo

Nesta página

Sumário

Com a versão do Microsoft Data Access Components (MDAC) 2.5, o fornecedor de OLEDB Microsoft para Oracle suporta agora a devolução de conjuntos de registos do ActiveX Data Objects (ADO) a partir de um procedimento de Oracle através da utilização de um tipo de CURSOR REF. Esta funcionalidade só é suportada no fornecedor de OLEDB Microsoft para Oracle. O Microsoft ODBC para Oracle controlador não suporta a utilização de CURSORES REF.

Mais Informação

Esta nova funcionalidade tem algumas vantagens sobre o fornecedor anterior:
  • Nas versões anteriores do fornecedor a única forma de obter um conjunto de registos ADO a partir de um procedimento de Oracle era declarar uma tabela PL/SQL para cada coluna que foi devolvida no conjunto de registos. Com o novo fornecedor que necessita apenas de declarar um CURSOR REF, em seguida, que processa a devolução de todas as colunas.

    Para obter informações adicionais na obtenção de procedimentos de Oracle em tabelas PL/SQL, clique no número de artigo existente abaixo para visualizar o artigo na base de dados de conhecimento da Microsoft:
    229919Como obter um conjunto de registos da Oracle utilizando ADO no ASP
  • Na versão anterior do fornecedor tinha de especificar o número máximo de registos que devolveria no conjunto de registos. Quando abre um conjunto de registos ADO baseia-se um CURSOR REF, esse passo já não é necessário. Com o novo fornecedor pode apenas especificar 0 para o número de registos. Por exemplo:

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

  • Se criar pacotes de Oracle, tem de compreender procedimentos idioma/Structured Query Language do Oracle.

  • O Internet Information Server (IIS) terá de configurar correctamente para trabalhar com a base de dados Oracle.

    Para obter informações adicionais, clique no número de artigo existente abaixo para visualizar o artigo na base de dados de conhecimento da Microsoft:
    193225Como configurar o IIS para ligar a Oracle a partir de ASP e ADO

Código de exemplo

O código de exemplo seguinte demonstra como obter um conjunto de registos ADO a partir de um procedimento de Oracle através de um CURSOR REF e, em seguida, apresenta os dados numa página ASP. Tem de modificar a cadeia de ligação OLEDB utilizada em código ASP para ligar à base de dados Oracle.

  1. Crie o pacote Oracle seguinte no servidor Oracle antes de executar qualquer código ASP. Este pacote utiliza algumas tabelas definidas no esquema Oracle Scott/Tiger. O esquema de Oracle Scott/Tiger é instalado com a instalação de Oracle predefinida. Se este esquema não existir, tem de executar os seguintes scripts de tabela e inserir algumas informações de 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. Segue-se 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 mais informações sobre o MDAC, consulte o seguinte Web site:
http://msdn2.microsoft.com/en-us/data/aa937695.aspx
Documentação Oracle8 Enterprise Edition

Propriedades

Artigo: 255043 - Última revisão: 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 revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 255043
Exclusão de Responsabilidade para Conteúdo sem Suporte na KB
Este artigo foi escrito sobre produtos para os quais a Microsoft já não fornece suporte. Por conseguinte, este artigo é oferecido "tal como está" e deixará de ser actualizado.

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