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