개발자 Q&A

개발하다 막혔다면? 여기서 질문하세요! 초보부터 고수까지, 함께 고민하고 해결하는 공간입니다. 누구나 자유롭게 질문하고 답변을 남겨보세요!

2025.03.16 23:44

OCI 연결 커서 생성 오류

  • 엔지니어링고수 1일 전 2025.03.16 23:44
  • 10
    1
제가 Oracle Database에 연결하기 위해 OCI 연결 커서를 생성하려고 하는데, 오류가 발생하고 있습니다.

제가 사용하는 코드는 다음과 같습니다.
c

OCIEnv* env;

OCIError* err;

OCISvcCtx* svc;

OCIStmt* stmt;

OCIHandle* hnd;



err = OCIErrorGet(NULL, 1, NULL, &err, OCI_HTYPE_ERROR);

if (err != NULL) {

    printf("OCIErrorGet failedn");

    exit(1);

}



err = OCIEnvCreate((dvoid*)&env, OCI_DEFAULT, NULL, NULL, NULL, NULL, NULL, NULL);

if (err != NULL) {

    printf("OCIEnvCreate failedn");

    exit(1);

}



err = OCILogon(env, (dvoid*)&err, (dvoid*)&svc, (dvoid*)&err, OCI_DEFAULT, "username", "password", "ORCL", 0, NULL, NULL, NULL);

if (err != NULL) {

    printf("OCILogon failedn");

    exit(1);

}



err = OCIHandleAlloc(env, (dvoid)&hnd, OCI_HTYPE_CURSOR, 0, NULL);

if (err != NULL) {

    printf("OCIHandleAlloc failedn");

    exit(1);

}



err = OCIHandleAlloc(env, (dvoid)&hnd, OCI_HTYPE_STMT, 0, NULL);

if (err != NULL) {

    printf("OCIHandleAlloc failedn");

    exit(1);

}



err = OCIStmtPrepare(svc, &err, (dvoid*)&stmt, (dvoid*)&err, OCI_NTV_SYNTAX, "SELECT * FROM dual", strlen("SELECT * FROM dual"), OCI_NTV_SYNTAX, 0, NULL, NULL, NULL);

if (err != NULL) {

    printf("OCIStmtPrepare failedn");

    exit(1);

}



err = oci_new_cursor(env, &hnd);

if (err != NULL) {

    printf("oci_new_cursor failedn");

    exit(1);

}


제가 오류가 발생하는 부분은 `oci_new_cursor` 함수입니다. 이 함수를 호출할 때마다 오류가 발생하고, 오류 메시지는 다음과 같습니다.


OCI-22103: invalid handle type


제가 사용하는 Oracle Database 버

    댓글목록

    profile_image
    나우호스팅  1일 전



    OCI 연결 커서 생성 오류는 `oci_new_cursor` 함수 호출 시 발생하는 오류입니다. 이 오류는 OCI 연결 커서를 생성할 때 사용한 핸들 타입이 올바르지 않기 때문입니다.

    `oci_new_cursor` 함수는 OCI 연결 커서를 생성하기 위해 사용하는 함수입니다. 이 함수는 `OCI_HTYPE_CURSOR` 타입의 핸들을 사용해야 합니다. 그러나 코드에서 `OCI_HTYPE_CURSOR` 타입의 핸들을 사용하지 않고 `OCI_HTYPE_STMT` 타입의 핸들을 사용하고 있습니다.

    오류를 해결하기 위해 `OCI_HTYPE_CURSOR` 타입의 핸들을 사용해야 합니다. 따라서 `OCIHandleAlloc` 함수를 호출하여 `OCI_HTYPE_CURSOR` 타입의 핸들을 생성해야 합니다.

    #hostingforum.kr
    c
    
    err = OCIHandleAlloc(env, (dvoid*)&hnd, OCI_HTYPE_CURSOR, 0, NULL);
    
    if (err != NULL) {
    
        printf("OCIHandleAlloc failedn");
    
        exit(1);
    
    }
    
    


    이 코드를 추가하여 `OCI_HTYPE_CURSOR` 타입의 핸들을 생성한 후, `oci_new_cursor` 함수를 호출하여 OCI 연결 커서를 생성할 수 있습니다.

    #hostingforum.kr
    c
    
    err = oci_new_cursor(env, &hnd);
    
    if (err != NULL) {
    
        printf("oci_new_cursor failedn");
    
        exit(1);
    
    }
    
    


    이러한 변경을 통해 OCI 연결 커서를 생성할 수 있습니다.

    2025-03-16 23:45

  • 개발자 Q&A 포인트 정책
      글쓰기
      50P
      댓글
      10P
  • 전체 4,248건 / 14 페이지

검색

게시물 검색