Quantcast
Channel: AnySQL.net » AnySQL
Viewing all articles
Browse latest Browse all 15

如何将BLOB的内容转到LONG RAW中

$
0
0

    PL/SQL基本上对于LONG RAW和BLOB无能为力, 对于这两种需要自已写程序来实现. 在AnySQL中就可以将BLOB的内容转换成LONG RAW, 下面是一个例子. 先来建一张测试表:

ASQL> SET QUERYONLY FALSE
ASQL> CREATE TABLE T_BLOB (ID NUMBER NOT NULL, IMAGE BLOB);

Create Table Succeed.

ASQL> VAR P_IMAGE BLOB
ASQL> DEFINE P_IMAGE=ASQL.EXE
ASQL> INSERT INTO T_BLOB VALUES (1, :P_IMAGE);

1 rows affected.

ASQL> DEFINE P_IMAGE=ASQLW.EXE
ASQL> INSERT INTO T_BLOB VALUES (2, :P_IMAGE);

1 rows affected.

ASQL> commit;

Commit Succeed.

    用LOBEXP命令将BLOB中的内容导出成一个个操作系统文件:

ASQL> LOBEXP SELECT 'IMAGE_'||ID||'.EXE', IMAGE FROM T_BLOB;

Write to file: IMAGE_2.EXE , bytes=101376
Write to file: IMAGE_1.EXE , bytes=101376
Command succeed.

    将表数据导出, 相应的BLOB字段替换为导出的操作系统文件名:

ASQL> UNLOAD -h off SELECT ID,'IMAGE_'||ID||'.EXE' FROM T_BLOB >> T_BLOB.TXT;

Query executed in 00:00:00.330
2            rows writed in 00:00:00.000

ASQL> host cat t_blob.txt
2|IMAGE_2.EXE
1|IMAGE_1.EXE

    创建一个LONG RAW的表:

ASQL> CREATE TABLE T_LONGRAW (ID NUMBER NOT NULL, IMAGE LONG RAW);

Create Table Succeed.

    创建一个buffer, 结构和导出的文件相同:

ASQL> buffer reset
Command completed.
ASQL> buffer add P_ID INTEGER
Command completed.
ASQL> buffer add P_IMAGE BLOB
Command completed.

    用LOAD命令来将数据装载到LONG RAW表中:

ASQL> LOAD INSERT INTO T_LONGRAW VALUES (:P_ID,:P_IMAGE) << T_BLOB.TXT;

Command Completed.
2 rows loaded!

    用LOBLEN命令来检查一下装入的LONG RAW字段的长度:

ASQL> LOBLEN SELECT IMAGE FROM T_LONGRAW;

101376,99
101376,99

    说明已经成功地将BLOB内容装入到LONG RAW表中, 此例中, 需要将AnySQL的jlib目录下的Oracle JDBC驱动换成10g的版本, 否则不允许更新LOB列.


Viewing all articles
Browse latest Browse all 15

Latest Images

Trending Articles