如何解决错误:ORA-01406获取的列值被截断?

时间:2013-08-12 15:11:02

标签: sql database oracle plsql sql-navigator

我正在尝试执行此查询:

select * 
  from gi_todo_isim 
 WHERE d_insercao >= '04-JUL-13' 
   AND d_insercao <= '25-JUL-13'

但是我收到了这个错误:

ORA-01406 fetched column value was truncated

如果我尝试计算存在多少列:

select count(*) 
  from gi_todo_isim 
 WHERE d_insercao >= '04-JUL-13' 
   AND d_insercao <= '25-JUL-13'

答案是1661597,这是一个很大的数字。任何人都可以提供任何解决方案如何执行此查询?

1 个答案:

答案 0 :(得分:4)

Oracle文档说明了错误代码:

“原因:在宿主语言程序中,FETCH操作被强制截断字符串。此列的程序缓冲区大小不足以包含整个字符串。来自fetch的游标返回代码为+3 。

操作:增加列缓冲区以保存最大列值或执行其他适当的处理。 当FETCH被强制截断宿主语言程序中的列名或字符串时,抛出ORA-01406。 ORA-01406是由列的程序缓冲区引起的,该区域的大小不足以完整地保存字符串,而游标返回代码为+3。“

因此,很可能,您定义的变量的大小小于查询为特定列返回的大小。例如,您可能将varchar2(100)值返回到大小为50或类似的缓冲区中。由于您未显示主机代码,因此无法确定确切的违规字段。