如何在SQL Developer中避免"原始变量长度太长"错误?

Xon*_*ron 8 sql oracle oracle-sqldeveloper

我正在更新大量文本的BLOB,我收到此错误:

SQL Error: ORA-06502: PL/SQL: numeric or value error: raw variable length too long
Run Code Online (Sandbox Code Playgroud)

它有什么办法吗?

该文本长度为2,670个字符,通过转换utl_i18n.string_to_raw,如在Oracle SQL Developer如何编辑BLOB(包含JSON)中所述?,并且在查询中都是一行.

更新:有问题的BLOB已包含长度为2,686个字符的文本,该文本比我尝试插入的文本长.

Jus*_*ave 7

A RAW限制为2000个字节.如果你的数据比这长,你需要将它存储在a中CLOB,然后将其转换CLOB为a BLOB,遗憾的是,这个string_to_raw函数要复杂一点.假设您可以将整个字符串分配给一个CLOB变量,只要该字符串的长度小于32676个字节,就可以使用这样的方法.如果它比这长,你需要写入CLOB片段,然后转换为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;
/
Run Code Online (Sandbox Code Playgroud)