为什么我在简单的DB2 select语句中得到“数据转换或数据映射错误.SQLCODE = -802”?

时间:2011-02-15 20:33:29

标签: php db2 ibm-midrange

我正在使用PHP访问IBM i(AS400)上的DB2信息。

使用此代码:

$query = "SELECT * FROM QS36F.MYTABLE WHERE MYFIELD=120006";
$result = db2_prepare($conn, $query);
db2_execute($result);

$i=0;
while($row = db2_fetch_assoc($result) or die(db2_stmt_errormsg())){
    $i++;
    print "Row " . $i . " successful<br />";
}

我明白了:

  

SELECT * FROM QS36F.MYTABLE WHERE MYFIELD = 120006

     

第1行成功
  第2行成功
  第3排成功
  第4行成功
  数据转换或数据映射错误。 SQLCODE = -802

应该有超过4个结果。 为什么会发生这种错误?

更多详情:

  • 同样的错误似乎发生在我在MYFIELD中搜索的任何值,尽管它可能是在不同数量的成功结果之后
  • MYFIELD是NUMERIC(7,0)
  • 我可以搜索表格中的其他字段(包括数字字段),它可以正常工作。

3 个答案:

答案 0 :(得分:3)

表中存在无效的十进制数据。有空白而不是零。我将零移动到那些空白中并修复了问题

答案 1 :(得分:2)

如果它可以帮助其他人,我会遇到同样的错误,并发现我在不匹配的数据类型之间进行加入:DECIMAL(2,0)字段和VARCHAR(5)字段。我们可以将VARCHAR转换为DECIMAL(2,0)它可以正常工作,否则会引发错误。

答案 2 :(得分:0)

根据文档,SQL0802是算术溢出。很可能其中一行的数据值对于您为其声明的php变量来说太大了,尽管我在您发布的代码中看不到它。或者还有一些其他有趣的数据转换没有正确发生,例如,如果QS36F.MYTABLE对象实际上是从另一个表中选择的视图,并且正在转换其中一个列。