QSYS2中函数TIMESTAMP_FORMAT的使用无效。成员上的数据映射错误

时间:2019-03-18 19:38:47

标签: db2-400 jt400

我在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. 

它看起来类似于Why am I getting a "[SQL0802] Data conversion of data mapping error" exception?中描述的问题 可能是与存储在DATE类型列中的无效数据有关。

在DATE列上,我看到一些记录在SQuirrel SQL Client中显示为<null>。有趣的是,这里有两个不同的<null>由不同的查询返回。  enter image description here

如果我运行

 select  distinct VARCHAR_FORMAT(DATE_COLUMN, 'YYYY/MM/DD')  from TABLE_NAME

我明白了 0001/01/01 和 9999/12/31 这些<null>的行。

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

0 个答案:

没有答案