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

时间:2012-03-16 19:03:58

标签: sql oracle oracle-sqldeveloper

我正在使用大量文本更新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个字符的文本,该文本比我尝试插入的文本长。

2 个答案:

答案 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)

我想问题是你插入到列中的数据对于列的数据类型来说太大了。请检查您要插入列中的值,然后更新列数据类型。