En RAW
är begränsad till 2000 byte. Om din data är längre än så måste du lagra den i en CLOB
och konvertera sedan CLOB
till en BLOB
vilket tyvärr är lite mer komplicerat än string_to_raw
fungera. Något liknande detta kommer att fungera förutsatt att du kan tilldela hela strängen till en CLOB
variabel som ska fungera så länge som strängen är mindre än 32676 byte lång. Om det är längre än så måste du skriva till CLOB
i bitar och konvertera sedan till en BLOB
.
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;
/