Почему я получаю сообщение "Ошибка преобразования или преобразования данных. SQLCODE = -802" в простом операторе выбора DB2? - PullRequest
4 голосов
/ 15 февраля 2011

Я обращаюсь к информации DB2 на IBM i (AS400) с PHP.

С этим кодом:

$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 />";
}

Я получаю:

ВЫБРАТЬ * ИЗ QS36F.MYTABLE, ГДЕ МОЙ ПОЛЕ = 120006

Строка 1 успешно
Строка 2 успешна
Строка 3 успешна
Строка 4 успешна
Ошибка преобразования или отображения данных. SQLCODE = -802

Должно быть более 4 результатов. Почему может возникнуть эта ошибка?

Подробнее:

  • Похоже, эта ошибка возникает при любом значении, которое я ищу в MYFIELD, хотя это может быть и после другого числа успешных результатов
  • MYFIELD ЧИСЛО (7,0)
  • Я могу искать другие поля в таблице (в том числе числовые), и она отлично работает.

Ответы [ 3 ]

3 голосов
/ 16 февраля 2011

В таблице указаны недопустимые десятичные данные. Там были пробелы вместо нулей. Я переместил нули в эти пробелы, и это решило проблему

2 голосов
/ 16 февраля 2012

Если это может кому-то помочь, у меня возникла та же ошибка, и я обнаружил, что объединяет несоответствующие типы данных : поле DECIMAL(2,0) и поле VARCHAR(5). Пока у нас есть VARCHAR s, которые можно преобразовать в DECIMAL(2,0), он может работать, в противном случае выдает ошибку.

0 голосов
/ 16 февраля 2011

Согласно документации, SQL0802 является арифметическим переполнением.Скорее всего, одна из строк имеет значение данных, которое слишком велико для переменной php, которую вы объявили для нее, хотя я не вижу этого в опубликованном вами коде.Или же есть какое-то другое забавное преобразование данных, которое не происходит должным образом, например, если объект QS36F.MYTABLE на самом деле является представлением, которое выбирается из другой таблицы и преобразовывает один из столбцов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...