sql - 插入日期,Oracle 12,Flyway
问题描述
在设置现有项目时(因此我无法更改脚本),数据迁移在此行失败;
insert into TABLE(NSQ, COD, TEXT, DAT_LAST)
values(1, 'EN', 'sample',to_timestamp('28-SEP-15 06.40.45.000000000 PM','DD-MON-RR HH.MI.SSXFF AM'));
出现错误:“ORA-1843”,不是有效月份。
nls_session_parameters 上的查询将语言显示为“美国”,日期格式显示为“DD-MON-RR”。
让我感到困惑的是,插入在通过flyway运行时不起作用,但在SQL Developer(同一个数据库)中运行时它成功而没有任何问题。
解决方案
在您的示例中,“DD-MON-RR HH.MI.SSXFF AM”中的 X 是一个基数字符(点)。大多数系统将其识别为整数 SS 和分数 FF 之间的分隔符,但显然 Flyway 没有。在 oracle 中,这 3 种格式在功能上是等效的: to_timestamp('28-SEP-15 06.40.45.000000000 PM','DD-MON-RR HH.MI.SSXFF AM')
to_timestamp('28-SEP-15 06.40.45.000000000 PM' ,'DD-MON-RR HH.MI.SS.FF AM') to_timestamp('28-SEP-15 06.40.45.000000000 PM','DD-MON-RR HH.MI.SS.FF9 AM')
Oracle 文档:小数秒;不打印基数字符。使用 X 格式元素添加基数字符。在 FF 之后使用数字 1 到 9 来指定返回的日期时间值的小数秒部分中的位数。如果不指定数字,则 Oracle 数据库使用为 datetime 数据类型指定的精度或数据类型的默认精度。在时间戳和间隔格式中有效,但在 DATE 格式中无效。
示例:'HH:MI:SS.FF'
从 DUAL 中选择 TO_CHAR(SYSTIMESTAMP, 'SS.FF3'); **结束 Oracle 文档。不幸的是,您似乎需要找到可以更改您的代码以实现兼容性的人。
推荐阅读
- sql-server - 使用视图的 case 子句
- azure-devops - 如何工作项获取仅更改链接的更改的历史记录项
- performance - 空闲后的非最佳 QnA Maker 应用服务实例行为
- android - Android 动作分享只工作一次
- java - Java中的Leetcode排列问题!列表在这个问题中是如何工作的?
- javascript - 接收二维数组 args 作为 js.Value 并想要一个数组 ([]js.Value)
- ruby-on-rails - Rails 应用程序内的 Rails 引擎中的继承
- c# - 分别从 PowerShell 和 PowerShell 的 C# .Net 库生成的访问令牌长度的差异
- javascript - 将数据传递给 javascript 但有很多反斜杠
- c# - 如何从 C# 中的表达式中提取所有属性访问语句?