Oracle Client Programming: OCI 예제 #1

|

어쨌든 까보자.

2009/10/31 - [프로그래밍/Library, Utility, ETC] - Oracle Client Programming: OCI (Oracle Call Interaface)

여기저기서 얻은 소스로 조금 분석을 해봤다. 역시 오라클 답게 함수 구성은 괭장히 지저분하다. (...) 일단 연결해서 서버 버전을 가져오는 것 까지.

최초 환경 설정에 대해 OCI는 두가지 버전을 제공한다.
첫번째는 OCIEnvCreate 함수로 OCIEnv 구조체를 받아온다. 두번째는 OCIInitialize 함수로 메모리 핸들 등을 할당한 후에 OCIEnvInit 함수로 OCIEnv 구조체를 받아온다. 장단점은? 내 생각에는 첫번째가 무조건 좋다. 두번째의 경우는 'backward compatibility'를 위해 존재한다고 되어 있다. 아마도 하위호환성, 같은 것인듯.

로그온 및 세션 획득에 대해서도 OCI는 두가지 버전을 제공한다.
첫번째는 OCILogon으로 OCISvcCtx 구조체를 받아오는 것. 두번째는 조금 복잡한데, OCIHandleAlloc으로 OCISvcCtx, OCIServer, OCISession 구조체들을 받아온 후에 OCIServerAttach 함수로 연결하고, OCIAttrSet 함수로 여러 변수를 다시 할당한 후에 OCISessionBegin 함수로 세션을 연결한다.

참고 사이트 : http://download.oracle.com/docs/cd/B14117_01/appdev.101/b10779/oci02bas.htm#462055 (세션과 커넥션을 연결하는 오라클 예제. 위 두가지 방식이 설명되어 있다. 두번째 방식은 예제도 있다. 참고해보면 될듯 하다.)

첫번째는 단일 유저에 단일 연결로 되어 있고, 두번째는 멀티 세션, 혹은 연결로 되어 있다. 이상한 것은, 첫번째의 설명에 'single user session for each database connection at any time' 이라는 것인데, 어느때건 각 데이터 베이스 연결에 단일 유저 세션만을 허용하는 것이라면, OCISvcCtx만 분리해주면 여러 데이터베이스에 연결될 수 있다는 것 아닐까?

뭐 테스트는 해보면 되겠지만.

어쨌든 두가지 다 첫번째 방식으로 사용해서 구성해 본 예제는 다음과 같다.


뭐 쿼리를 날려본 것도 아닌데 거창하기만 하네. (오라클 문서가 얼마나 보기 힘들면 말이지.)


And