我正在使用大量文本更新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个字符的文本,该文本比我尝试插入的文本长。
答案 0 :(得分:7)
RAW
限制为2000个字节。如果您的数据长于此值,则需要将其存储在CLOB
中,然后将CLOB
转换为BLOB
,遗憾的是,string_to_raw
稍微复杂一点CLOB
{1}}功能。假设您可以将整个字符串分配给CLOB
变量,只要字符串的长度小于32676字节,该变量就可以正常工作。如果时间长于此值,则需要分段写入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;
/
。
{{1}}
答案 1 :(得分:0)
我想问题是你插入到列中的数据对于列的数据类型来说太大了。请检查您要插入列中的值,然后更新列数据类型。