常看到有人问如何更新LOB或LONG类型的字段中的内容, 在SQL*Plus中是不容易的, 在AnySQL小工具中, 除了可以用LOB类型的主机变量, 我设计了LOB和LOBIMP命令来对这些数据类型进行查询操作, 这些命令可以将运行AnySQL的机器(非服务器端)上的文件上传更新到LONG/LOB字段中.
LOB命令语法, 这里面query应当只返回一行及一列(LONG或LOB类型), 在SELECT中应当加上"FOR UPDATE"子句表示锁定LOB进行更新.
Usage:
LOB query << file
Note :
<< mean import a file to blob/clob field, the query
should include the for update clause
LOBIMP命令语法, 这里面query应当只返回两列, 第一列为文件名, 第二列为LONG或LOB字段, 在SELECT中应当加上"FOR UPDATE"子句表示锁定LOB进行更新.
Usage:
LOBIMP query
Note :
Query should return tow column as following:
col1 : CHAR or VARCHAR specify the filename.
col2 : blob/clob field.
下面来看一下例子中用到的表:
ASQL> SELECT FNAME FROM T_LOB;
FNAME
-----
a.txt
otop
2 rows returned.
ASQL> desc t_LOB;
NO# NAME NULLABLE TYPE
--- ----------------- -------- ------------
1 FNAME VARCHAR2(20)
2 FTEXT CLOB
我们将"FTEXT"字段更新成空的CLOB值, 在使用这两个命令时, 要确保LOB字段中的值不为NULL, 如下所示:
ASQL> update t_lob set ftext=empty_clob();
2 rows affected.
ASQL> commit;
Commit Succeed.
下面用LOB命令来更新一个值:
ASQL> LOB SELECT FTEXT FROM T_LOB WHERE FNAME='a.txt' FOR UPDATE << a.txt;
Command succeed.
ASQL> commit;
Commit Succeed.
用LOBIMP的例子:
ASQL> LOBIMP SELECT FNAME,FTEXT FROM T_LOB FOR UPDATE;
File a.txt loaded.
File otop loaded.
Command succeed.
ASQL> commit;
Commit Succeed.
现在检查一下数据库中的值是不是已经被更新了? 这个功能请使用Oracle 10g中带的JDBC驱动(ojdbc14.jar).