首页 > 解决方案 > 在 QSYS2 中使用函数 TIMESTAMP_FORMAT 无效。成员数据映射错误

问题描述

我是 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 端查找和过滤具有“无效”数据(导致日志中出现上述异常)的记录?

标签: db2-400jt400

解决方案


推荐阅读