Sql 将BLOB转换为CLOB时出现数字或值错误

Sql 将BLOB转换为CLOB时出现数字或值错误,sql,oracle,plsql,blob,clob,Sql,Oracle,Plsql,Blob,Clob,我有一个BLOB列,需要CLOB中的内容,这样我就可以使用更多的字符串函数。不幸的是,我在表上只有SELECT权限,因此无法更改其结构 我使用DBMS\u LOB包,它可以很好地处理相对较小的blob。例如,对于一个长度为30.000的BLOB是可以的,但是对于长度为40.000的BLOB,我得到 ORA-06502:PL/SQL:数字或值错误%s 这让我怀疑其中是否涉及到了VARCHAR2转换,但我不知道如何进行,因为我没有VARCHAR2变量 我最长的BLOB是63.000个字符长 使用下面

我有一个BLOB列,需要CLOB中的内容,这样我就可以使用更多的字符串函数。不幸的是,我在表上只有SELECT权限,因此无法更改其结构

我使用
DBMS\u LOB
包,它可以很好地处理相对较小的blob。例如,对于一个长度为30.000的BLOB是可以的,但是对于长度为40.000的BLOB,我得到

ORA-06502:PL/SQL:数字或值错误%s

这让我怀疑其中是否涉及到了VARCHAR2转换,但我不知道如何进行,因为我没有VARCHAR2变量

我最长的BLOB是63.000个字符长

使用下面的方法,我成功地转换了53行中的50行。(剩下的3个大于30000个字符。)

任何帮助都将不胜感激

提前谢谢

SET serveroutput ON;

DECLARE
  sRuleName [column]%type;
  bRuleBLOB BLOB;
  cRuleBLOB CLOB;

  v_file_size number := dbms_lob.lobmaxsize;
  v_dest_offset number := 1;
  v_src_offset number := 1;
  v_blob_csid number := dbms_lob.default_csid;
  v_lang_context number := dbms_lob.default_lang_ctx;
  v_warning number;

  CURSOR cRules IS
    SELECT [column]
    FROM [table]
    WHERE [column] IN ('x','y','z')
    ORDER BY [column];
BEGIN
  dbms_output.enable(100000);
  OPEN cRules;
  LOOP
  FETCH cRules INTO sRuleName;
  EXIT WHEN cRules%NOTFOUND;
  --dbms_output.put_line(sRuleName);

    SELECT rule
    INTO bRuleBLOB
    FROM [table]
    WHERE [column] = sRuleName;

    dbms_lob.createtemporary(cRuleBLOB, true);

    v_dest_offset  := 1;
    v_src_offset  := 1;

    dbms_lob.converttoclob(cRuleBLOB, bRuleBLOB, v_file_size, v_dest_offset, v_src_offset, v_blob_csid, v_lang_context, v_warning);

    dbms_output.put_line(cRuleBLOB);
    dbms_lob.freetemporary(cRuleBLOB);
  END LOOP;
  CLOSE cRules;
END;
问题在于

dbms_output.put_line(cRuleBLOB);

输出中单行的最大长度为32767字节。

谢谢!!现在很明显。。。。我被文档中的行限制弄糊涂了:“行长度溢出,每行限制32767字节”,我从来没有想到它适用于整个CLOB