Я очень новичок в iseries / DB2.
Мы используем V7R3. У нас есть таблица, которая каждый день генерируется программой RPG в виде физического файла. Для доступа к данным таблицы из Java мы используем драйвер jt400.jar jdbc.
Большинство запросов к таблице работают нормально, но некоторые сложные запросы, использующие "DENSE_RANK () OVER (ORDER BY" и "ROW_NUMBER () OVER (PARTITION BY", время от времени зависают и приводят к тому, что процессор на 100% убивает только задание). на стороне AS400 решает проблему.
в журнале AS400 я вижу:
Job 969954/QUSER/QZDASOINIT started on 02/21/19 at 09:36:46 in subsystem
QUSRWRK in QSYS. Job entered system on 02/21/19 at 09:36:46.
User USERXX from client X.X.X.X connected to server.
Use of function TIMESTAMP_FORMAT in QSYS2 not valid.
Use of function TIMESTAMP_FORMAT in QSYS2 not valid.
Data mapping error on member TABLE_NAME.
Data mapping error on member TABLE_NAME.
Data mapping error on member TABLE_NAME.
Data mapping error on member TABLE_NAME.
Value in date, time, or timestamp string not valid.
Это похоже на проблему, описанную в Почему я получаю исключение "[SQL0802] Преобразование данных ошибки отображения данных"?
и, вероятно, проблема связана с неверными данными, хранящимися в столбцах типа DATE.
Глядя на столбцы DATE, я вижу, что некоторые записи отображаются в SQuirrel SQL Client как <null>
. Интересно, что здесь есть два разных <null>
, возвращаемых по отдельному запросу.
![enter image description here](https://i.stack.imgur.com/1hqqk.jpg)
Если я бегу
select distinct VARCHAR_FORMAT(DATE_COLUMN, 'YYYY/MM/DD') from TABLE_NAME
я получаю
0001/01/01
а также
9999/12/31
для этих <null>
строк.
если я запускаю Select * from TABLE, где DATE_COLUMN равен null, я не получаю никаких результатов. Поэтому я не уверен, что это за <null>
.
Не уверен, что эти записи могут вызвать проблемы.
UPD: при запуске
Select * from TABLE
Я вижу ошибки в журнале клиента JDBC:
Warning: [SQL0181] Value in date, time, or timestamp string not valid.
SQLState: 01534
ErrorCode: 181
Warning: [SQL0181] Value in date, time, or timestamp string not valid.
SQLState: 01534
ErrorCode: 181Warning: [SQL0181] Value in date, time, or timestamp string not valid.
SQLState: 01534
ErrorCode: 181
Warning: [SQL0181] Value in date, time, or timestamp string not valid.
SQLState: 01534
ErrorCode: 181
Query 1 of 1, Rows read: 100, Elapsed time (seconds) - Total: 0.252, SQL query: 0.005, Reading results: 0.247
на основе https://www.consolut.com/en/s/sap-ides-access/d/s/p/40/doc/XH-SQL0181/ это должна быть неправильная дата где-то в таблице
Вопрос в том, есть ли способ найти и отфильтровать записи, которые содержат «недопустимые» данные (вызывающие выше исключения в журнале) со стороны SQL?