
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