我正在更新大量文本的BLOB,我收到此错误:
sql Error: ORA-06502: PL/sql: numeric or value error: raw variable length too long
它有什么办法吗?
该文本长度为2,670个字符,通过utl_i18n.string_to_raw进行转换,如How do I edit BLOBs (containing JSON) in Oracle SQL Developer?中所述,并且在查询中都在一行中.
更新:有问题的BLOB已包含长度为2,686个字符的文本,该文本比我尝试插入的文本长.
解决方法
RAW限制为2000字节.如果你的数据比这长,你需要将它存储在CLOB中,然后将CLOB转换为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; /