【问题标题】:Spring Batch: SQL error ORA-01858: a non-numeric character was found where a numeric was expectedSpring Batch:SQL 错误 ORA-01858:在需要数字的地方发现了一个非数字字符
【发布时间】:2016-10-07 09:07:23
【问题描述】:

我正在尝试在我的春季批处理阅读器中使用此 SQL。 SQL好像有问题:

select DISTINCT ces.COR_ENBL_STG_ID 
from HBX_BATCH_COR_ENBL_STG ces 
Inner JOIN HBX_INDV_NEG_ACTION ina ON ces.INDV_ID=ina.INDV_ID 
where ces.DISP_PROCESSED_FLAG='Y'  
AND ina.NEG_ACTION_RUN_RSN_CD in('11054','11055','11065') 
AND ces.PGM_BGN_DT+90<'#{jobExecutionContext['latest.completed.startTime']}'

latest.completed.start.time 的值来自使用 jdbctemplate 的 tasklet 的“07-Oct-16 12:38:58.000000109 PM”,因此 SQL 抛出以下错误: ORA-01858: 在需要数字的地方发现了一个非数字字符。

仅供参考,列 ces.PGM_BGN_DT 是日期类型。我尝试了 TO_DATE 函数,但没有帮助。请问有什么建议吗?

【问题讨论】:

  • latest.completed.startTime 的数据时间是多少?您对 TO_DATE() 做了什么尝试,请告诉我们。
  • 此错误来自 jdbc 驱动程序,而不是来自 Spring Batch Reader,因此不是 Spring Batch Reader 问题。您需要修复查询和数据。看看这两个有没有帮助,SO_Q1SO_Q2
  • @NghiaDo latest.completed.startTime 是一个时间戳值。我需要将它与日期的 pgm_bgn_dt 进行比较。问题是因为批处理在替换值并将其保留在单引号内后将其作为字符串。我用 to_timestamp 现在比较它。
  • @SabirKhan 感谢您的链接。它们非常有用。 :)

标签: oracle jdbc spring-batch


【解决方案1】:

据我了解 latest.completed.startTime - 是一串字符。 它看起来像 oracle 时间戳数据类型。 如果我的建议是真的,您应该使用格式将字符串转换为时间戳

to_timestamp(latest.completed.startTime, 'dd-mon-yy HH12:MI:SS.FF AM');

【讨论】:

  • 嘿@michael Piankov 感谢您的帮助。由于单引号,批处理参数 latest.completed.startTime 在被替换为值后以字符串形式出现。我用 to_timestamp 现在比较好。非常感谢:)
猜你喜欢
  • 1970-01-01
  • 2015-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-25
相关资源
最近更新 更多