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

Win*_*ter 3 sql database oracle plsql sql-navigator

我正在尝试执行此查询:

select * 
  from gi_todo_isim 
 WHERE d_insercao >= '04-JUL-13' 
   AND d_insercao <= '25-JUL-13'
Run Code Online (Sandbox Code Playgroud)

但是,这我回来这个错误:

ORA-01406 fetched column value was truncated
Run Code Online (Sandbox Code Playgroud)

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

select count(*) 
  from gi_todo_isim 
 WHERE d_insercao >= '04-JUL-13' 
   AND d_insercao <= '25-JUL-13'
Run Code Online (Sandbox Code Playgroud)

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

Old*_*mer 5

Oracle文档指出了有关错误代码的信息:

“原因:在宿主语言程序中,强制执行FETCH操作以截断字符串。此列的程序缓冲区不足以容纳整个字符串。从提取中获取的游标返回代码为+3。

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

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