我是 iseries/DB2 的新手。
我们使用 V7R3。我们有 RPG 程序每天生成的表格作为物理文件。为了从 java 访问表数据,我们使用 jt400.jar jdbc 驱动程序。
大多数表查询工作正常,但一些使用“DENSE_RANK() OVER(ORDER BY”和“ROW_NUMBER() OVER(PARTITION BY”的复杂查询不时挂起并导致 CPU 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 列,我看到一些记录<null>
在 SQuirrel SQL 客户端中显示。有趣的是,这里有 2 个不同<null>
的 ' 由不同的查询返回。
如果我跑
select distinct VARCHAR_FORMAT(DATE_COLUMN, 'YYYY/MM/DD') from TABLE_NAME
对于这些行,我得到 0001/01/01 和 9999/12/31 <null>
。
如果我从 DATE_COLUMN 为空的 TABLE 中运行 Select *,我不会得到任何结果。所以我不确定那是什么类型的<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 端查找和过滤具有“无效”数据(导致日志中出现上述异常)的记录?