상세 컨텐츠

본문 제목

ASP에서 오라클 DB를 이용하는 방법

프로그래밍/JAVA

by 라제폰 2009. 1. 23. 17:04

본문

 

세계적으로 많이 사용되고 있는 데이터베이스 중 하나가 바로 오라클이다. 대개 ASP를 이용할 경우 데이터베이스는 SQL 서버를 사용하는 것이 정석이지만 ASP를 통해 오라클에 접속하여 데이터를 처리하는 것 역시 불가능한 일이 아니다. 이번 시간엔 바로 ASP를 이용하여 오라클 데이터를 처리하는 방법에 대해 살펴볼 것이다.

시작하기 전에 OO4O(Oracle Objects for OLE)에 대해 먼저 알아야 하겠다. OO4O는 마이크로소프트의 OLE(Object Linking and Embedding) 표준을 이용하여 클라이언트 프로그램으로부터 오라클에 직접 접속할 수 있도록 도와주는 오라클 미들웨어로 생각하면 좋을 것이다. 물론 ODBC를 사용하여 접속할 수도 있다. 하지만 개인적인 의견이긴 하지만 PL/SQL을 완전히 지원하는 OO4O를 이용하는 것이 더 좋은 방법이라고 생각한다. 만일 Oracle8i를 완벽히 설치했다면 이미 OO4O를 사용할 준비는 다 되어있는 것이다. 만일 그렇지 않다면 오라클 공식 홈페이지에 접속하여 관련 프로그램을 다운로드 받아 설치해야 할 것이다.

시작하기 전에 몇 가지 더 알아야 할 용어들이 있다. 그것은 오라클이 VB 개발자들을 위해 개발한 Orasession 및 OraDynaset 객체와 OraDatabase 인터페이스이다. OraSession 객체는 애플리케이션에서 사용하는 OraDatabase, OraConnection 및 OraDynaset 컬렉션들을 관리한다. 이 객체는 OO4O의 메쏘드로 생성하는 것이 아니라 ASP의 CreateObject 메쏘드를 이용하여 생성한다. OraDatabse 인터페이스는 사용자 세션을 오라클 데이터베이스에 알려 주고, SQL 및 PL/SQL을 실행하는데 필요한 속성과 메쏘드를 제공한다. OraDynaset은 BOF, EOF, Bookmark, Connection과 같은 속성과 AddNew, Update, Delete, Edit, Refresh, Clone 등의 메쏘드를 가지고 있다.

이제 ASP를 이용하여 오라클 데이터를 처리해 보도록 하자.


 

준비

여기서 진행할 개발 환경은 Oracle8i, IIS5.0, Windows2000 Professional이다. 그리고 하나의 테이블을 오라클 데이터베이스에 생성하여 MYTABLE1이라고 명명하였다. 이 테이블의 내용은 다음과 같다.

ID(type: number) User Name(type: varchar2) Phone(type: varchar2) Email(type: varchar2)
100 Colin Tong 999-999-8888 colinjava@hotmail.com
111 John White 888-888-8888 johnw@yahoo.com
101 Don Wod 416-333-3344 donwod@test.com


 

DB 접속 및 데이터 가져오기

1. OO4O 객체 OraSession과 오라클에 접속하기 위한 OraDatabse 인터페이스를 생성한다. 우선 CreateObject를 통해 OraSession을 생성하고 오라클에 접속하기 위해 OraSession의 OpenDatabse를 이용하여 OraDatabse를 생성한다. 방법은 다음과 같다.

<%
Set OraSession = CreateObject("OracleInProcServer.XOraSession")
Set OraDatabase = OraSession.OpenDatabase("", _
       "username/password", Cint(0))
%>

여기서 username과 password는 데이터베이스의 사용자 이름과 암호를 의미한다.

2. SQL문을 실행하여 OraDynaset 객체를 생성한다. 레코드셋을 만들기 위해 CreateDynaset 또는 DbCreateDynaset 메쏘드를 이용할 수 있다.

<%
'execute SQL
Set OraDynaset = OraDatabase.DbCreateDynaset( _
      "select * from mytable1", cint(0))
%>

3. 데이터를 가지고온 후 생성된 객체를 제거한다.

<%
Do While(OraDynaset.EOF = FALSE)  
        Response.write(OraDynaset.Fields("ID"))
        Response.write(OraDynaset.Fields("UserName"))
        ... others ...  
        ... ...
        OraDynaset.MoveNext
Loop
'OraSession 제거
Set OraSession = Nothing
%>


 

데이터 레코드 수정

1. SQL문을 이용하여 OraDynaset 객체를 생성한다.

<%
'ID=fID인 레코드를 가지고 오기 위해 OraDynaset 객체 생성
Set OraDynaset = OraDatabase.CreateDynaset(_
      "select * from MYTABLE1 where ID= "& fID, cint(0))
%>

여기서 fID는 수정 또는 삽입하고자 하는 ID 필드의 값이다.

2. 수정 또는 삽입을 위해 OraDynaset을 실행시킨다.

<%
'레코드가 ID=fID인 필드를 Edit 메쏘드를 이용하여 수정
'또는 새로운 레코드 삽입을 위해 AddNew 이용

OraDynaset.Edit
OraDynaset.Fields("Phone").Value = fPhone
OraDynaset.Update
     
' 생성된 세션 제거
Set OraSession = Nothing
%>


 

데이터 레코드 삭제

OraDynaset을 이용하여 원하는 레코드를 삭제할 수 있다. 아마 위에 설명한 Edit, Update, AddNew를 완전히 이해했다면 어렵지 않게 레코드를 삭제할 수 있을 것이다. 삭제하고자 하는 레코드셋을 OraDynaset으로 생성한 후 다음과 같이 Delete 메쏘드를 이용하면 된다.

<%
'위 조건에 대한 모든 레코드 삭제
OraDynaset.Delete
%>


 

Oracle8i로부터 레코드를 검색하고 수정하는 예제 코드

1. 데이터 가져오기

<%
    'OLE 객체를 위한 변수 선언
     Dim OraSession
     Dim OraDatabase
     Dim OraDynaset
     
     
    'OraSession 객체 생성
     Set OraSession = CreateObject("OracleInProcServer.XOraSession")
     
    'OraDatabase 객체 생성
    '오라클 DB에 접속하기 위한 자신의 username과 password 사용할 것
     Set OraDatabase = OraSession.OpenDatabase("", "user/password", _
         Cint(0))
        
    'SQL문을 실행하여 OraDynaset 객체 생성
     Set OraDynaset = OraDatabase.DbCreateDynaset(_
         "select * from mytable1", cint(0))
%>
<html><body>
<H5>OO4O를 이용하여 오라클에 있는 MYTABLE1 테이블의 모든 레코드 가져오기</H5>
<table border=1 ID="Table1">
<%
     Do While(OraDynaset.EOF = FALSE)  
       Response.Write("<tr><td>")
       Response.write(OraDynaset.Fields("ID"))
       Response.Write("</td><td>")
       Response.write(OraDynaset.Fields("UserName"))
       Response.Write("</td><td>")
       Response.write(OraDynaset.Fields("Phone"))
       Response.Write("</td><td>")
       Response.write(OraDynaset.Fields("Email"))
       Response.Write("</td></tr>")
       OraDynaset.MoveNext
     Loop
        
     'OraSession 객체 제거
     Set OraSession = Nothing
%>
</table>
</body></html>

2. 데이터 수정

<%
    'OLE 객체를 위한 변수 선언
     Dim OraSession
     Dim OraDatabase
     Dim OraDynaset
         
     '폼에서 submit한 필드 값을 받음
     fID = request.form("ID")
     fUserName = request.form("UserName")
     fPhone = request.form("Phone")
     fEmail = request.form("Email")
         
     'OraSession 객체 생성
     Set OraSession = CreateObject("OracleInProcServer.XOraSession")
         
     'OraDatabse 객체 생성
     Set OraDatabase = OraSession.OpenDatabase("", "user/password", _
         Cint(0))  
         
     'ID=fID인 레코드를 위해 OraDynaset 객체 생성
     Set OraDynaset = OraDatabase.CreateDynaset(_
         "select * from MYTABLE1 where ID= "& fID, cint(0))
     
    '레코드가 ID=fID인 필드 업데이트
     Do While(OraDynaset.EOF = FALSE)  
        OraDynaset.Edit
        OraDynaset.Fields("UserName").Value = fUserName
        OraDynaset.Fields("Phone").Value = fPhone
        OraDynaset.Fields("Email").Value = fEmail
        OraDynaset.Update
        OraDynaset.MoveNext
     Loop
%>
<html><body>
<H5>OO4O를 이용하여 오라클의 MYTABLE1에 있는 레코드 수정</H5>
    레코드 (ID=<%=fID%>) 가 성공적으로 수정되었습니다!<br>
<%
       'OraSession 객체 제거
        Set OraSession = Nothing
%>
</body></html>


관련글 더보기