Sql 将BLOB转换为CLOB时出现数字或值错误
我有一个BLOB列,需要CLOB中的内容,这样我就可以使用更多的字符串函数。不幸的是,我在表上只有SELECT权限,因此无法更改其结构 我使用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个字符长 使用下面
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