기술 정보
home
채널 소개
home

Tibero-OCI 연동 방법 (Windows)

문서 유형
기술 정보
분야
인터페이스/연동
키워드
Windows
OCI
적용 제품 버전
6FS06

개요

Oracle Call Interface(이하 OCI) 라이브러리를 사용해 windows 환경에서 Tibero 서버와 연결하는 방법을 안내 합니다.
참고
아래와 같은 환경에서 테스트를 진행하였습니다.
OS: Windows 10 (64 bit)
DB: Tibero 6 FS06
IDE: VS 2017

방법

OCI 설치

1. OCI 라이브러리 복사

Tibero 바이너리 안에 포함된 라이브러리 파일(%TB_HOME%binlibtboci.lib, %TB_HOME%binlibtboci.dll)을 사용할 클라이언트 윈도우로 복사합니다.
주의
Tibero 바이너리의 32/64 bit 버전에 따라 해당 라이브러리만 빌드되어 있습니다. 컴파일 하고자 하는 application의 플랫폼 bit에 맞추어 동일 bit 의 바이너리에서 복사합니다.

2. Oracle OCI header 복사

$ORACLE_HOME/rdbms/public 폴더 내 위치한 .h 파일들을 사용할 클라이언트 윈도우로 복사합니다.

3. 환경설정 추가

a.
[프로젝트]-[속성] 에서 속성 페이지의 [C/C++]-[일반] 탭에 라이브러리 및 헤더 파일 디렉터리를 추가합니다.
b. [링커]-[일반] 탭에서 추가 라이브러리 디렉터리를 설정합니다.
c. [링커]-[입력] 탭에서 tibero oci 라이브러리를 종속성에 추가합니다.

OCI 활용한 Tibero 작업

1. OCI header 추가

#include “oci.h”
SQL
복사

2. OCI 오브젝트 Initialize

static OCIEnv *p_env; static OCIError *p_err; static OCISvcCtx *p_svc; static OCIStmt *p_sql; static OCIDefine *p_dfn = (OCIDefine *)0; static OCIBind *p_bnd = (OCIBind *)0; int p_bvi; char p_sli[20]; int rc; OraText errbuf[100]; int errcode; rc = OCIInitialize((ub4)OCI_DEFAULT, (dvoid )0, / Initialize OCI */ (dvoid * (*)(dvoid *, size_t)) 0, (dvoid * (*)(dvoid *, dvoid *, size_t))0, (void(*)(dvoid *, dvoid *)) 0); /* Initialize evironment */ rc = OCIEnvInit((OCIEnv **)&p_env, OCI_DEFAULT, (size_t)0, (dvoid **)0); /* Initialize handles */ rc = OCIHandleAlloc((dvoid *)p_env, (dvoid **)&p_err, OCI_HTYPE_ERROR, (size_t)0, (dvoid **)0); rc = OCIHandleAlloc((dvoid *)p_env, (dvoid **)&p_svc, OCI_HTYPE_SVCCTX, (size_t)0, (dvoid **)0);
SQL
복사

3.  Tibero database 연결

계정, 데이터베이스 정보를 입력합니다.
참고
버전에 따라 스트링 데이터(char)는 오라클 정의 타입(OraText)으로 캐스팅함으로써 컴파일 가능합니다.
/* Connect to database server */ rc = OCILogon(p_env, p_err, &p_svc, (OraText)”sys”, 3, (OraText)”tibero”, 6, (OraText*)”tibero”, 6); if (rc != 0) { OCIErrorGet((dvoid *)p_err, (ub4)1, (text *)NULL, &errcode, errbuf, (ub4) sizeof(errbuf), OCI_HTYPE_ERROR); printf("Error - %.*sn", 512, errbuf); exit(8); }
SQL
복사

4.  SQL(select) 전처리

/* Allocate and prepare SQL statement */ rc = OCIHandleAlloc((dvoid *)p_env, (dvoid **)&p_sql, OCI_HTYPE_STMT, (size_t)0, (dvoid **)0); rc = OCIStmtPrepare(p_sql, p_err, (OraText*)select * from dual”, (ub4)37, (ub4)OCI_NTV_SYNTAX, (ub4)OCI_DEFAULT);
SQL
복사

5.  SQL(select) 실행 및 결과 출력

/* Execute the SQL statment */ rc = OCIStmtExecute(p_svc, p_sql, p_err, (ub4)1, (ub4)0, (CONST OCISnapshot *) NULL, (OCISnapshot *)NULL, OCI_DEFAULT); while (rc != OCI_NO_DATA) { /* Fetch the remaining data */ printf("%s", p_sli); rc = OCIStmtFetch(p_sql, p_err, 1, 0, 0); }
SQL
복사

6.  SQL(insert) 전처리

/* sql prepare */ rc = OCIStmtPrepare(p_sql, p_err, (OraText*)insert into test values(dummy, 100);, (ub4)37, (ub4)OCI_NTV_SYNTAX, (ub4)OCI_DEFAULT);
SQL
복사

7.  SQL(insert) 실행 및 결과 확인

OCI_COMMIT_ON_SUCCESS 모드로 설정 시, 쿼리가 성공적으로 적용된다면 자동으로 COMMIT을 수행합니다.
rc = OCIStmtExecute(p_svc, p_sql, p_err, (ub4)1, (ub4)0, (CONST OCISnapshot *) NULL, (OCISnapshot *)NULL, OCI_COMMIT_ON_SUCCESS);
SQL
복사