Você está offline; aguardando reconexão

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

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.
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 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. 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: Documentação Oracle8 Enterprise Edition
REF_CURSOR

Aviso: este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 255043 - Última Revisão: 05/17/2007 10:33:26 - Revisão: 3.3

Microsoft OLE DB Provider for Oracle Server 1.0

  • kbmt kbhowto kboracle KB255043 KbMtpt
Comentários
l>