如何使用ORACLE中的SQL UPDATE命令将BLOB数据附加/连接到BLOB列

时间:2011-07-04 11:30:43

标签: oracle append blob

我需要将数据附加到我的BLOB字段, 如何使用UPDATE命令执行此操作? 我要问的是;是否可以连接blob数据,以便我最终可以将其设置为类似的字段 更新BLOB_table 组 BLOB_field = BLOB_field + BLOB_data

我尝试使用DBMS_LOB.APPEND,但它没有返回值;所以我创建了一个函数,它给出了一个错误“指定了无效的LOB定位器”

CREATE OR REPLACE FUNCTION MAKESS.CONCAT_BLOB(A in BLOB,B in BLOB) RETURN BLOB IS
 C BLOB;
BEGIN
DBMS_LOB.APPEND(c,A);
DBMS_LOB.APPEND(c,B);
RETURN c;
END;
/

2 个答案:

答案 0 :(得分:17)

您需要使用DBMS_LOB.createtemporary

创建临时blob
SQL> CREATE OR REPLACE FUNCTION CONCAT_BLOB(A IN BLOB, B IN BLOB) RETURN BLOB IS
  2     C BLOB;
  3  BEGIN
  4     dbms_lob.createtemporary(c, TRUE);
  5     DBMS_LOB.APPEND(c, A);
  6     DBMS_LOB.APPEND(c, B);
  7     RETURN c;
  8  END;
  9  /

Function created

然后你应该能够在更新声明中使用它:

SQL> CREATE TABLE t (a BLOB, b BLOB, c BLOB);

Table created

SQL> INSERT INTO t VALUES
  2     (utl_raw.cast_to_raw('aaa'), utl_raw.cast_to_raw('bbb'), NULL);

1 row inserted

SQL> UPDATE t SET c=CONCAT_BLOB(a,b);

1 row updated

SQL> SELECT utl_raw.cast_to_varchar2(a),
  2         utl_raw.cast_to_varchar2(b),
  3         utl_raw.cast_to_varchar2(c)
  4  FROM t;

UTL_RAW.CAST_TO_VARCHAR2(A UTL_RAW.CAST_TO_VARCHAR2(B UTL_RAW.CAST_TO_VARCHAR2(C
-------------------------- -------------------------- --------------------------
aaa                        bbb                        aaabbb 

答案 1 :(得分:5)

在PL / SQL的帮助下,blob可以在不需要自定义功能的情况下进行更新:

BEGIN
   FOR c IN (select a, b from t where a is not null for update) LOOP
       DBMS_LOB.APPEND(c.a, c.b);
   END LOOP;
END;
/