
OCIEnvFree(env, OCI_DEFAULT) 함수를 호출하여 OCIEnv 객체를 해제하고 OCIHandleFree(svctx, OCI_HTYPE_SVCCTX) 함수를 호출하여 OCISVCtx 객체를 해제하는 방법은 올바른 방법입니다.
그러나, OCILogon 함수를 호출하여 데이터베이스에 연결한 후, OCIHandleFree(err, OCI_HTYPE_ERROR) 함수를 호출하여 OCIError 객체를 해제하는 것은 올바르지 않습니다.
OCIError 객체를 해제하기 전에, OCIHandleFree(svctx, OCI_HTYPE_SVCCTX) 함수를 호출하여 OCISVCtx 객체를 해제하고 OCIEnvFree(env, OCI_DEFAULT) 함수를 호출하여 OCIEnv 객체를 해제해야 합니다.
또한, OCIHandleFree(err, OCI_HTYPE_ERROR) 함수를 호출하기 전에, OCIErrorGet 함수를 호출하여 오류 코드를 확인하고, 오류가 발생한 경우, OCIErrorGet 함수를 호출하여 오류 메시지를 확인해야 합니다.
오류가 발생한 경우, OCIHandleFree(err, OCI_HTYPE_ERROR) 함수를 호출하기 전에, 오류를 처리하는 코드를 추가해야 합니다.
예를 들어, 다음과 같이 코드를 수정할 수 있습니다.
#hostingforum.kr
c
#include
int main() {
OCIEnv *env;
OCISvcCtx *svctx;
OCIError *err;
// 데이터베이스에 접속
OCIEnvCreate(&env, OCI_DEFAULT, 0, 0, 0, 0, 0, 0);
OCIHandleAlloc(env, (dvoid *)&err, OCI_HTYPE_ERROR, 0, 0);
OCIHandleAlloc(env, (dvoid *)&svctx, OCI_HTYPE_SVCCTX, 0, 0);
// 데이터베이스에 연결
OCILogon(env, err, &svctx, (OCILogonAuthInfo *)0, 0, 0, 0);
// 데이터베이스 작업 수행
// 데이터베이스 연결 종료
OCIHandleFree(svctx, OCI_HTYPE_SVCCTX);
OCIErrorGet(err, 1, 0, 0, 0, 0, 0, 0, 0);
if (OCIErrorGet(err, 1, 0, 0, 0, 0, 0, 0, 0) == 0) {
OCIHandleFree(err, OCI_HTYPE_ERROR);
}
OCIEnvFree(env, OCI_DEFAULT);
return 0;
}
이 코드에서는 OCIErrorGet 함수를 호출하여 오류 코드를 확인하고, 오류가 발생한 경우, 오류 메시지를 확인합니다. 오류가 발생하지 않은 경우, OCIHandleFree 함수를 호출하여 OCIError 객체를 해제합니다.
2025-05-20 10:04