Oracle
 sql >> Base de données >  >> RDS >> Oracle

Comment puis-je éviter les erreurs de longueur variable brute trop longues dans SQL Developer?

Un RAW est limité à 2000 octets. Si vos données sont plus longues que cela, vous devrez les stocker dans un CLOB puis convertir le CLOB à un BLOB qui est, malheureusement, un peu plus compliqué que le string_to_raw une fonction. Quelque chose comme ça fonctionnera en supposant que vous pouvez affecter la chaîne entière à un CLOB variable qui devrait fonctionner tant que la chaîne est inférieure à 32676 octets de longueur. S'il est plus long que cela, vous devrez écrire dans le CLOB en morceaux puis converti 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;
/