3

我正在尝试执行此查询:

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一个很大的数字。谁能给出任何解决方案我该如何执行这个查询?

4

1 回答 1

7

Oracle 文档对错误代码进行了说明:

“原因:在宿主语言程序中,FETCH 操作被强制截断字符串。该列的程序缓冲区不够大,无法包含整个字符串。提取的游标返回码为 +3。

行动:增加列缓冲区以容纳最大的列值或执行其他适当的处理。当 FETCH 被强制截断主机语言程序中的列名或字符串时,会引发 ORA-01406。ORA-01406 是由于列的程序缓冲区不足以容纳整个字符串,而光标返回代码为 +3。”

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

于 2013-08-12T19:22:00.700 回答