这怎么会引起错误?
select
DBMS_LOB.SUBSTR("CLOB-Data-Column",4000,1) as column_name
from "Table_name"
where LENGTH("CLOB-Data-Column") <= 4000
错误是
ORA-06502: PL/SQL: numeric or value error: character string buffer too small
尝试
时没有错误select
SUBSTR("CLOB-Data-Column",1, 4000) as column_name
from "Table_name"
where LENGTH("CLOB-Data-Column") <= 4000
但这太慢了。
根据关于SO的类似主题的旧问题和Oracle文档的参考,对于DBMS_LOB.SUBSTR(),字符串长度为4000应该没问题。数字4000表示CLOB的字符数(根据Oracle引用)。如果我将过滤器的长度更改为低于2000,则查询将无错运行。
数据库列的类型为CLOB。 Oracle文档说'amount'(DBMS_LOB.SUBSTR的第一个参数):要读取的字节数(对于BLOB)或字符(对于CLOB)。
答案 0 :(得分:1)
某些字符似乎是多字节字符。 DBMS_LOB.SUBSTR对字符进行计数,这些字符不符合允许的最大VARCHAR2大小,即4000。