Ein RAW ist auf 2000 Bytes begrenzt. Wenn Ihre Daten länger sind, müssen Sie sie in einem CLOB speichern und konvertieren Sie dann den CLOB zu einem BLOB was leider etwas komplizierter ist als string_to_raw Funktion. So etwas funktioniert, vorausgesetzt, Sie können die gesamte Zeichenfolge einem CLOB zuweisen Variable, die funktionieren sollte, solange die Zeichenfolge weniger als 32676 Bytes lang ist. Wenn es länger ist, müssen Sie in das CLOB schreiben zerstückeln und dann in ein BLOB umwandeln .
declare
l_blob blob;
l_clob clob := rpad('{"foo": {"id": "1", "value": "2", "name": "bob"}}',3200,'*');
l_amt integer := dbms_lob.lobmaxsize;
l_dest_offset integer := 1;
l_src_offset integer := 1;
l_csid integer := dbms_lob.default_csid;
l_ctx integer := dbms_lob.default_lang_ctx;
l_warn integer;
begin
dbms_lob.createTemporary( l_blob, false );
dbms_lob.convertToBlob( l_blob,
l_clob,
l_amt,
l_dest_offset,
l_src_offset,
l_csid,
l_ctx,
l_warn );
update json_data
set data = l_blob;
end;
/