我正在使用大量文本更新BLOB,但出现此错误:
SQL Error: ORA-06502: PL/SQL: numeric or value error: raw variable length too long
有什么办法解决吗?
文本长度为2670个字符,通过进行了转换utl_i18n.string_to_raw,如[我如何在Oracle SQL Developer中编辑BLOB(包含JSON)所述。并且全部在查询中的一行上。
utl_i18n.string_to_raw
更新: 有问题的BLOB已经包含2686个字符长的文本,比我要插入的文本长。
ARAW限制为2000个字节。如果您的数据长于此长度,则需要将其存储在a中CLOB,然后将其转换CLOB为a BLOB,但是不幸的是,该string_to_raw函数要比该函数复杂一点。假设您可以将整个字符串分配给一个CLOB变量,只要该字符串的长度小于32676个字节,该变量就应该起作用,这样的事情将起作用。如果长度超过此长度,则需要逐段写入CLOB,然后转换为BLOB。
RAW
CLOB
BLOB
string_to_raw
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; /