Liquibase脚本返回ORA-01843:无效月份

Liquibase脚本返回ORA-01843:无效月份,第1张

Liquibase脚本返回ORA-01843:无效月份

'02.01.15 12:00:00'
不是日期,而是字符串;如果您尝试将其插入
DATE
数据类型列,则Oracle将尝试使用以下等效项将其转换为日期:

SELECt TO_DATE(         '02.01.15 12:00:00',         ( SELECT value FROM NLS_SESSION_PARAMETERS WHERe parameter = 'NLS_DATE_FORMAT' )       ) as CHANGEDFROM   DUAL

因此,如果您的

NLS_DATE_FORMAT
会话参数与字符串的格式不匹配,
'02.01.15 12:00:00'
则它将引发异常-
这是自获取以来似乎正在发生的事情
ORA-01843: not a valid month

最好的解决方案是修改脚本以将字符串显式转换为日期:

MERGE INTO A configUSING (  SELECt 100 as id,         TO_DATE( '02.01.15 12:00:00', 'DD.MM.YY HH24:MI:SS' ) as CHANGED,         0 as DELETED,         1 as B  FROM   DUAL) src ON (src.id = config.id)WHEN NOT MATCHED THEN   INSERT(id,CHANGED, DELETED, B) VALUES(src.id, src.CHANGED, src.DELETED, src.B)WHEN MATCHED THEN  UPDATE SET config.B = src.B;

或使用时间戳文字:

TIMESTAMP '2015-01-02 12:00:00'

但是您也可以创建一个登录触发器来更改

NLS_DATE_FORMAT
会话参数。将触发器包装在以下代码周围:

ALTER SESSION SET NLS_DATE_FORMAT = 'DD.MM.YY HH24:MI:SS';

但是,这会将所有隐式转换中使用的日期格式从字符串更改为日期(反之亦然),因此可能会中断其他也依赖于此类隐式转换的查询。此外,每个用户都可以随时更改其会话参数,因此在登录时设置此默认值取决于他们在会话期间永不更改它。

[TL; DR] 修复您的脚本,使其不使用数据类型之间的隐式转换,而不是修改用于隐式转换的格式模型。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4958334.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-13
下一篇 2022-11-13

发表评论

登录后才能评论

评论列表(0条)

保存