Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Wie kann ich in SQL Developer Fehler mit zu langer Rohvariablenlänge vermeiden?

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