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

기술 자료 번역 기술 자료 번역
기술 자료: 255043 - 이 문서가 적용되는 제품 보기.
이 문서는 이전에 다음 ID로 출판되었음: KR255043
모두 확대 | 모두 축소

이 페이지에서

요약

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 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. 아래는 위의 프로시저를 호출하는 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에 대한 자세한 내용은 아래 웹 사이트를 참조하십시오.
http://www.microsoft.com/data/download.htm
Oracle8 Enterprise Edition 설명서

속성

기술 자료: 255043 - 마지막 검토: 2004년 9월 21일 화요일 - 수정: 3.0
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft OLE DB Provider for Oracle Server 1.0
키워드:?
kbasp kbgrpmdac kboledb kboledb250 kboracle kbhowto KB255043
더 이상 지원되지 않는 제품의 KB 내용에 대한 고지 사항
이 문서에서는 Microsoft에서 더 이상 지원하지 않는 제품에 대해 설명합니다. 따라서 이 문서는 "있는 그대로" 제공되며 업데이트되지 않습니다.

피드백 보내기

 

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