본문 바로가기

others

ASP+ORACLE

======================================================================================

오라클 연결

======================================================================================

먼저, 오라클디비가 어디에 있느냐에 먼저 설치를 해야 할 작업이 있습니다.

웹서버와 동일한 머신상에 있지 않은 경우에는 웹서버가 있는 머신에 최소 오라클 클라이언트 이상을 설치해
야지만 연동이 됩니다. (이유는 웹서버와 오라클 서버가 통신을 해야 하기 때문입니다. 자세한 내용은 오라클
네트워크 어드민 쪽을 참고하시기 바랍니다.)

오라클 서버를 연동할 수 있는 대표적 방법 4가지를 간략하게 적습니다.

① 오라클 ODBC 드라이버
② MS ODBC 드라이버
③ MS OLE-DB 제공자
④ 오라클 OLE-DB 제공자

※ 연결 문자열 및 참고 설명....  (부족하지만...   ^^*;)

①+② : 이것은 ODBC 상에서 제어가 됩니다. 연결 구문은 기존 다른 것과 동일합니다. 종류는 ODBC로 연결
생성시 선택할 수 있습니다. (①번은 웬만해선 사용하지 않는 게 좋을 것 같습니다...) 연결 문자열은 dsn=연결명;uid=유저아이디;pwd=패스워드;
③ : Provider=MSDAORA.1; Data Source=오라클서버명; User ID=유저 아이디; Password=패스워드 를 연결문자로 이용하심 됩니다.
④ : Provider=OraOLEDB.Oracle.1;Password=패스워드;Persist Security Info=True;User ID=유저 아이디;Data Source=오라클 서버명

참고로 처음에는 ①번을 사용하시고 어느 정도 되시면 ③번 문자열(MS용 OLE-DB 제공자)을 이용하시는 게 좋을 것 같습니다.(ODBC연결보다 한개의 레이어가 적어 성능의 효율성을 높일 수 있습니다.)

④ 오라클용 OLE-DB 제공자는 최신 버전이어서 여러가지 장점(LOB 지원등...)도 있지만, ASP에서 쓰시려면 유의해야할 것들이 몇가지가 있습니다.  -  참고로 제가 알기론 (오라클 본(미국)사의 OLE-DB 팀원의 답변에 비추어...) ③번 MS용 OLE-DB 제공자는 오라클 8버전 이전의 것에 맞추어진 것이라고 합니다. (WROX에서 나온 책에[ASP DATA ACCESS]는 오라클 8을 기준으로 했다고 하지만, LOB타입류를 전혀 지원을 안하기 땜에... 그건 아닌 것 같다는 생각이 듭니다.)
만약, 어쩔 수 없이 LOB타입을 쓰셔야 할 상황이라면 - 8i에서 i가 internet을 의미한다는 것으로 본다면 LOB타
입 지원은 기본이겠죠...  varchar2나 long raw 으로 해결할 수 없는 것이 있으니... -  ④번을 이용하시되, 8.1.6 위의 버전을 이용하셔야 합니다. 버전이 8.1.6 인 경우에는 8.1.7 OLE DB 프로그램을 설치해 쓰셔야 LOB 타입을 ASP상에서 쓸 수 있다고 합니다. (사실, 8.1.7은 다운받아 놓고 바빠서 설치 및 테스트를 못하고 있습니다.. (ORAOLEDB 8.1.6 만 써봤습니다...)  조만간 8.1.7을 쓸 예정입니다...  이 녀석이 현재의 몇가지 문제점을 해결해 줄 수 있는 멋진 놈인지 알아볼 셈입니다.

LOB타입류에 대한 문제(입출력)를 ①번, ④번 연결로 해결할 수 있습니다.
(처음엔 ①번 오라클 제공 ODBC 드라이버가 별루 좋지 않은 것으로 생각되었습니다만, 이번을 기회삼아 다시 돌아볼 예정입니다.)

일단, 제가 다루지 않는 8i 하위 버전은 잘 모르겠습니다. (ORACLE 8도 LOB타입류를 지원하는 것으로 알고 있지만 되는 지 여부는 안해봐서 잘 모르겠습니다. 참고로 저는 MS SQL SERVER을 주로 써왔으며 - 현재는 가끔씩 들어오는 프로젝트의 일부땜에 쓰고 있습니다. - 지금 다니는 회사에서부터  ORACLE을 쓰기 시작했습니다.)

제가 쓰는 오라클 버전은 8.1.6입니다. 자료는 OTN 본사(http://technet.oracle.com)내 포럼 중 Oracle Provider - OLE DB 포럼을 참고하시면 됩니다.


=====================================================================================
오라클 사용시 페이징
======================================================================================

MS-SQL의 경우 TOP 문을 사용합니다.

하지만, 오라클에는 TOP문이 없지요. 그래서 다음과 같이 ADO의 MaxRecords 속성을 사용합니다.

Const conPageSize = 10

Dim page

page = 5

Set objRS = Server.CreateObject("ADODB.Recordset")
With objRS
    .Source = "적절한 SQL문장"
    .MaxRecords = (page * conPageSize)
    .Open , , , , adCmdText
    If .BOF And .EOF Then
'       데이터가 없을 경우
    Else
        .Move((page - 1) * conPageSize)
'       데이터 처리
    End If
End With
Set objRS = Nothing

위 예제에서 5페이지에 있다면 page * conPageSize 에 의해 총 50개의 데이터를 가져오게 됩니다.

그리고, Recordset.Move((page - 1) * conPageSize) 문장에 의해 40개의 데이터를 이동한 후

나머지 데이터를 처리하게 되면 5 페이지의 데이터를 처리하게 되는 것입니다.

일단, top 문을 사용한 페이징 코드 또는 강좌를 보시고, 이 코드를 적용하시면 쉽게 적용하실 수 있을것 입니다.


=====================================================================================
오라클 프로시져 사용법
======================================================================================

set objcom  = server.CreateObject("adodb.command")

 objCom.ActiveConnection = dbcon
    objCom.CommandType = 4
    objCom.CommandText = "여기에 프로시저명"
 objCom.Parameters.Refresh

 objCom.Parameters("@shop_code").Value       = Cint(shop_code)

 값 받을때..
 order_id = objCom.Parameters("@order_id").value

objCom.Execute