0
点赞
收藏
分享

微信扫一扫

如何读取Oracle的BLOB字段里的文件


 如何读取Oracle的BLOB字段里的文件

 

 

使用ORADBI读取存储在BLOB字段里的多个文件,并还原到指定的路径下。

下面是完整的代码:

 


// 
// read_blobfile.c - 读BLOBFILE的例子
// cheungmine@gmail.com//
// 内存泄漏检测
// 在需要检测的地方放置语句:
// _CrtDumpMemoryLeaks();
// 以下3句的次序不能改变
#define _CRTDBG_MAP_ALLOC
#include<stdlib.h>
#include<crtdbg.h>

// 包含唯一的ORADBI 头文件
#include "../oradbi.h"

#ifdef _DEBUG
#pragma comment(lib, "../oradbi_dll/debug/oradbid.lib")
#else
#pragma comment(lib, "../oradbi_dll/release/oradbi.lib")
#endif


#define ORADB_SERVICE "CHEUNG"
#define ORADB_LOGUSER "mineusr"
#define ORADB_PASSWORD "minepwd"

/*==================================================
-- Create table
create table TEST
(
BM VARCHAR2(10),
NAME VARCHAR2(100),
BIRTH DATE,
DATA BLOB
)
tablespace USERS
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);
====================================================*/

//
// 显示如何把从BLOB字段读出数据并还原为文件
//
void
{

lresult rc;
ora_error_t err;
ora_connection con = 0;
ora_sqlstmt stmt = 0;
ora_rowset rs = 0;
ora_column col;
ora_datetime odt;
char
char
char
ushort num_files = 0;
ushort ui;


// 创建连接
rc = ORA_connection_create( &con, ORADB_SERVICE, ORADB_LOGUSER, ORADB_PASSWORD, OCI_THREADED|OCI_OBJECT, FALSE, &err);
assert(rc==ORC_SUCCESS);

// 创建SQL, 只取一行记录: where rownum<2
"select BM,NAME,BIRTH,DATA from TEST where rownum<2", -1, 0, &err );
assert(rc==ORC_SUCCESS);

// 执行选取
rc = ORA_sqlstmt_select(stmt, MOD_DEFAULT, &rs, &err);
assert(rc==ORC_SUCCESS);

"/n BM NAME BIRTH DATA/n------------------------------------------------------/n");

while
{

// BM
col = ORA_rowset_get_column_by_index(rs, 1, &err);
assert(ORA_column_not_null(col));
ORA_column_as_string(col, &psz, &err);
" %s ", psz);

// NAME
col = ORA_rowset_get_column_by_index(rs, 2, &err);
assert(ORA_column_not_null(col));
ORA_column_as_string(col, &psz, &err);
" %s ", psz);

// BIRTH
col = ORA_rowset_get_column_by_index(rs, 3, &err);
assert(ORA_column_not_null(col));
ORA_column_as_datetime(col, &odt, &err);
"YYYY-MM-DD HH:UU:SS", buf, &err);
" %s ", buf);

// DATA
col = ORA_rowset_get_column_by_index(rs, 4, &err);
assert(ORA_column_not_null(col));

// 读取LOB字段数据, 写入文件:
"c://temp", &pp_fnames, &num_files, &err);
assert(rc==ORC_SUCCESS);

for(ui=0; ui<num_files; ui++){

"/n%s", pp_fnames[ui]);
}
ORA_string_list_free(pp_fnames, num_files);

"/n");
}

// 释放
ORA_rowset_free (rs);
ORA_sqlstmt_free(stmt);
ORA_connection_free(con);
}

//
// 主程序
//
int main(int argc, char* argv[])
{

select_blob_data();

_CrtDumpMemoryLeaks();

return
}

举报

相关推荐

0 条评论