加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2020-12-12 16:18:47 所属栏目:MsSql教程 来源:网络整理
导读:我正在更新大量文本的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) i
我正在更新大量文本的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;
/

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读