2011-07-04 8 views
9

BLOBフィールドにデータを追加する必要があります。 UPDATEコマンドを使用してこれを行うにはどうすればよいですか? 私は何を求めているのですか。私はDBMS_LOB.APPENDを使用して試みたが、それは値を返さない BLOB_field = BLOB_field + BLOB_dataORACLEでSQL UPDATEコマンドを使用してBLOBデータにBLOBデータを追加/連結する方法

UPDATE BLOB_TABLE SETのような分野にそれを最終的に設定できるようにBLOBデータを連結することが可能です。私は

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

答えて

15

「を指定された無効なLOBロケータ」あなたは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 

その後、あなたはそれを使用することができるはずです更新文:PL/SQLブロブの助けを借りて

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

がすべてでカスタム関数を必要とせず、その場で更新することができます。

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; 
/
関連する問題