개발자 Q&A

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

2025.06.16 16:19

OCILob::export 관련 질문

목록
  • PostgreSQL마법사 오래 전 2025.06.16 16:19
  • 39
    1
제가 Oracle의 OCILob::export 함수를 사용하여 LOB 데이터를 추출하려고 하는데,

LOB 데이터를 추출한 후에 해당 데이터를 파일로 저장하는 방법을 알려주세요.

LOB 데이터는 BLOB, CLOB, BFILE 형태로 추출하는 경우가 있습니다.

해당 데이터를 파일로 저장하는 방법에 대해 알려주세요.

    댓글목록

    profile_image
    나우호스팅  오래 전



    OCILob::export 함수를 사용하여 LOB 데이터를 추출한 후 파일로 저장하는 방법은 다음과 같습니다.

    1. BLOB 데이터 추출 후 파일로 저장:
    - 추출한 BLOB 데이터를 OCILob::length 함수를 사용하여 크기를 확인합니다.
    - OCILob::read 함수를 사용하여 BLOB 데이터를 읽습니다.
    - 읽은 BLOB 데이터를 파일로 저장합니다.

    2. CLOB 데이터 추출 후 파일로 저장:
    - 추출한 CLOB 데이터를 OCILob::length 함수를 사용하여 크기를 확인합니다.
    - OCILob::read 함수를 사용하여 CLOB 데이터를 읽습니다.
    - 읽은 CLOB 데이터를 파일로 저장합니다.

    3. BFILE 데이터 추출 후 파일로 저장:
    - 추출한 BFILE 데이터를 OCILob::length 함수를 사용하여 크기를 확인합니다.
    - OCILob::read 함수를 사용하여 BFILE 데이터를 읽습니다.
    - 읽은 BFILE 데이터를 파일로 저장합니다.

    파일로 저장하는 방법은 다음과 같습니다.

    - 파일을 열어 데이터를 쓰는 방법: OCILob::export 함수를 사용하여 LOB 데이터를 추출한 후, OCILob::write 함수를 사용하여 파일에 데이터를 쓰는 방법입니다.
    - 파일을 열어 데이터를 쓰는 방법: OCILob::export 함수를 사용하여 LOB 데이터를 추출한 후, OCILob::write 함수를 사용하여 파일에 데이터를 쓰는 방법입니다.

    예제:

    #hostingforum.kr
    c
    
    #include 
    
    
    
    int main() {
    
        // Oracle 연결 설정
    
        OCISvcCtx* svcCtx;
    
        OCIEnv* env;
    
        OCIError* err;
    
        OCISession* sess;
    
        OCIDefine* def;
    
        OCIStmt* stmt;
    
        OCILobLocator* lobLoc;
    
    
    
        // Oracle 연결
    
        OCIEnvCreate(&env, OCI_DEFAULT, 0, 0, 0, 0, 0, 0);
    
        OCIHandleAlloc(env, (dvoid)&err, OCI_HTYPE_ERROR, 0, 0);
    
        OCIHandleAlloc(env, (dvoid)&svcCtx, OCI_HTYPE_SVCCTX, 0, 0);
    
        OCIHandleAlloc(env, (dvoid**)&sess, OCI_HTYPE_SESSION, 0, 0);
    
    
    
        // Oracle 연결 설정
    
        OCIAttrSet(err, OCI_HTYPE_ERROR, (dvoid*)0, 0, OCI_ATTR_ERROR_MESSAGE_TEXT, env);
    
        OCIAttrSet(svcCtx, OCI_HTYPE_SVCCTX, (dvoid*)0, 0, OCI_ATTR_SERVER, env);
    
        OCIAttrSet(sess, OCI_HTYPE_SESSION, (dvoid*)0, 0, OCI_ATTR_SERVER, env);
    
    
    
        // SQL 문 실행
    
        OCIStmtPrepare(stmt, err, (OraText*)sql, strlen(sql), OCI_NTV_SYNTAX, OCI_DEFAULT);
    
        OCIStmtExecute(svcCtx, stmt, err, 1, 0, 0, 0);
    
    
    
        // LOB 데이터 추출
    
        OCIDefineByPos(stmt, &def, err, 1, (dvoid*)&lobLoc, (ub4)sizeof(OCILobLocator), SQLT_BLOB, 0, 0, OCI_DEFAULT);
    
    
    
        // LOB 데이터 크기 확인
    
        OCILobLength(lobLoc, &length, err);
    
    
    
        // LOB 데이터 읽기
    
        OCILobRead(lobLoc, 1, length, &buf, &amtRead, err);
    
    
    
        // 파일 열기
    
        FILE* file = fopen("output.txt", "w");
    
    
    
        // LOB 데이터 파일에 쓰기
    
        fwrite(buf, 1, amtRead, file);
    
    
    
        // 파일 닫기
    
        fclose(file);
    
    
    
        // LOB 데이터 닫기
    
        OCILobFreeTemporary(lobLoc, err);
    
    
    
        return 0;
    
    }
    
    


    이 예제는 BLOB 데이터를 추출한 후 파일로 저장하는 방법을 보여줍니다. CLOB 데이터나 BFILE 데이터를 추출한 후 파일로 저장하는 방법도 비슷합니다.

    2025-06-16 16:20

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

검색

게시물 검색