Как добавить / объединить данные BLOB в столбец BLOB с помощью команды SQL UPDATE в ORACLE
Мне нужно добавить данные в мое поле BLOB, как это сделать с помощью команды UPDATE? Я спрашиваю: возможно ли объединить данные blob, чтобы я мог в конечном итоге установить его в поле, подобное Обновить BLOB_table НАБОР BLOB_field = BLOB_field + BLOB_data
Я попытался использовать DBMS_LOB.Добавить, но он не возвращает значение, поэтому я создал функцию, которая дает мне ошибку "недопустимый локатор 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 ответов
вам нужно создать временный blob с DBMS_LOB.createtemporary
:
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
тогда вы должны иметь возможность использовать его в инструкции update:
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
С помощью 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;
/