2011-07-04 119 views
9

Necesito anexar datos a mi campo BLOB, ¿cómo puedo hacer esto usando un comando UPDATE? Lo que estoy preguntando es; ¿es posible concatenar los datos blob para que eventualmente puede establecer en un campo como ACTUALIZACIÓN BLOB_Table SET BLOB_field = BLOB_field + BLOB_data¿Cómo puedo agregar/concatenar datos BLOB a una columna BLOB usando el comando SQL UPDATE en ORACLE

He intentado utilizar DBMS_LOB.APPEND pero no devuelve un valor; Así que creé una función que me da un error de "localizador de LOB no válido"

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; 
/

Respuesta

15

Es necesario crear una burbuja temporal con 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 

, entonces debería ser capaz de utilizarlo en una instrucción de actualización:

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 
3

con ayuda de burbuja PL/SQL puede ser actualizada en su sitio sin necesidad de función personalizada en absoluto:

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; 
/
Cuestiones relacionadas