OCI를 통한 Tibero 작업
1. OCI header 추가
#include “oci.h”
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);
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);
}
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);
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);
}

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);
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);
