oracle认证:如何读取Oracle的BLOB字段里的文件Oracle认证考试
文章作者 100test 发表时间 2009:05:02 15:25:03
来源 100Test.Com百考试题网
使用ORADBI读取存储在BLOB字段里的多个文件,并还原到指定的路径下。
下面是完整的代码:
//
// read_blobfile.c - 读BLOBFILE的例子
//内存泄漏检测
// 在需要检测的地方放置语句:
// _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 0select_blob_data()
{
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 *psz.
char buf[30].
char **pp_fnames = 0.
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
rc = ORA_sqlstmt_create( &.stmt, con, "0select BM,NAME,BIRTH,DATA from TEST where rownum<.2", -1, 0, &.err ).
assert(rc==ORC_SUCCESS).
// 执行选取
rc = ORA_sqlstmt_0select(stmt, MOD_DEFAULT, &.rs, &.err).
assert(rc==ORC_SUCCESS).
printf("n BM NAME BIRTH DATAn------------------------------------------------------n").
while (ORA_rowset_next(rs))
{
// BM
col = ORA_rowset_get_column_by_index(rs, 1, &.err).
assert(ORA_column_not_null(col)).
ORA_column_as_string(col, &.psz, &.err).
printf(" %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).
printf(" %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).
ORA_datetime_to_string(odt, "YYYY-MM-DD HH:UU:SS", buf, &.err).
printf(" %s ", buf).
// DATA
col = ORA_rowset_get_column_by_index(rs, 4, &.err).
assert(ORA_column_not_null(col)).
// 读取LOB字段数据, 写入文件:
rc = ORA_column_read_lobfile(col, "c:\temp", &.pp_fnames, &.num_files, &.err).
assert(rc==ORC_SUCCESS).
for(ui=0. ui<.num_files. ui ){
printf("n%s", pp_fnames[ui]).
}
ORA_string_list_free(pp_fnames, num_files).
printf("n").
}
// 释放
ORA_rowset_free (rs).
ORA_sqlstmt_free(stmt).
ORA_connection_free(con).
}
//
// 主程序
//
int main(int argc, char* argv[])
{
0select_blob_data().
_CrtDumpMemoryLeaks().
return 0.
}
更多优质资料尽在百考试题论坛 百考试题在线题库