현재 오프라인 상태입니다. 인터넷에 다시 연결하기를 기다리고 있습니다.

HOWTO: ASP를 통해 Oracle(REF CURSOR)에서 ADO 레코드 집합을 검색하는 방법

이 문서는 이전에 다음 ID로 출판되었음: KR255043
더 이상 지원되지 않는 제품의 KB 내용에 대한 고지 사항
이 문서에서는 Microsoft에서 더 이상 지원하지 않는 제품에 대해 설명합니다. 따라서 이 문서는 "있는 그대로" 제공되며 업데이트되지 않습니다.
요약
Microsoft Data Access Components(MDAC) 2.5 릴리스에서 Oracle용 Microsoft OLE DB 공급자는 REF CURSOR 형식을 사용하여 Oracle 프로시저에서 ActiveX Data Objects(ADO) 레코드 집합을 반환할 수 있도록 지원합니다. 이 기능은 Oracle용 Microsoft OLE DB 공급자에서만 지원됩니다. Oracle용 Microsoft ODBC 드라이버는 REF CURSORS 사용을 지원하지 않습니다.
추가 정보
이 새 기능은 이전의 공급자와 비교할 때 아래와 같은 이점이 있습니다.
  • 이전 버전의 공급자에서는 Oracle 프로시저에서 ADO 레코드 집합을 검색하려면 레코드 집합에서 반환되는 각 열(Column)에 대해 PL/SQL 테이블을 선언해야 했습니다. 그러나 새 공급자에서는 REF CURSOR 하나만 선언하면 반환되는 모든 열(Column)을 REF CURSOR가 처리합니다.

    PL/SQL 테이블을 통해 Oracle 프로시저를 검색하는 방법에 대한 자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
    229919 HOWTO: Retrieve a Recordset from Oracle Using ADO on ASP
  • 이전 버전의 공급자에서는 레코드 집합에서 반환되는 최대 레코드 수를 지정해야 했습니다. 그러나 REF CURSOR를 기반으로 하는 ADO 레코드 집합을 열 때는 이를 지정할 필요가 없습니다. 새 공급자에서는 아래 예제와 같이 레코드의 수에 간단히 0을 지정할 수 있습니다.

     {call curspkg_join.open_join_cursor1(?, {resultset 0, io_cursor})}
본 문서의 예제를 사용하려면 아래와 같은 조건을 갖추어야 합니다.
  • Microsoft Visual Basic Scripting Edition(VBScript), ActiveX Data Objects(ADO), Active Server Pages(ASP)를 능숙하게 다룰 수 있어야 합니다.

  • Oracle 패키지를 만드는 경우에는 Oracle의 PL/SQL을 이해하고 있어야 합니다.

  • Oracle 데이터베이스를 작업할 수 있도록 Internet Information Server(IIS)를 적합하게 구성해야 합니다.

    자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
    193225 ASP와 ADO에서 Oracle에 연결하도록 IIS를 구성하는 방법

예제 코드



아래의 예제 코드는 REF CURSOR를 통해 Oracle 프로시저에서 ADO 레코드 집합을 검색한 다음 데이터를 ASP 페이지에 표시하는 방법을 보여줍니다. Oracle 데이터베이스에 연결하려면 ASP 코드에서 사용되는 OLE DB 연결 문자열을 수정해야 합니다.

  1. ASP 코드를 실행하기 전에 Oracle 서버에서 아래와 같은 Oracle 패키지를 만듭니다. 이 패키지는 Oracle Scott/Tiger 스키마에 정의된 몇몇 테이블을 사용합니다. Oracle Scott/Tiger 스키마는 Oracle을 설치할 때 기본적으로 설치됩니다. 이 스키마가 없으면 아래의 테이블 스크립트를 실행하여 테이블에 몇 가지 정보를 삽입해야 합니다.

    테이블 스크립트
    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));

    패키지 스크립트
    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. 아래는 위의 프로시저를 호출하는 ASP 스크립트입니다.
    <%@ 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>
참조
MDAC에 대한 자세한 내용은 아래 웹 사이트를 참조하십시오. Oracle8 Enterprise Edition 설명서
속성

문서 ID: 255043 - 마지막 검토: 09/21/2004 08:15:28 - 수정: 3.0

  • Microsoft OLE DB Provider for Oracle Server 1.0
  • kbasp kbgrpmdac kboledb kboledb250 kboracle kbhowto KB255043
피드백