oracle Alter Session NLS FORMAT for bulk insert statements - 行为不符合预期

Posted

技术标签:

【中文标题】oracle Alter Session NLS FORMAT for bulk insert statements - 行为不符合预期【英文标题】:oracle Alter Session NLS FORMAT for bulk insert statements - not behaving as expected 【发布时间】:2019-05-03 17:56:48 【问题描述】:

我已经以插入语句的格式从 SQL DB 中导出了表信息。许多表包含 YYYY-MM-DD HH24:MI:SS 格式的时间戳信息。由于有数百个这样的语句,因此在每个日期中添加 TO_DATE() 语句对我来说是不现实的。我认为更改会话 NLS DATE 格式可以解决此问题,但是我仍然收到有关 ORA-01843: not a valid month 的错误。

列数据类型为TIMESTAMP

示例:

ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS' 

INSERT INTO gcGovernance (id, userID, grantAppID, grantAppUUID, 
grantCommCatID, grantApprovalCmnt, grantApprovalDate) VALUES (758, 163, 
408, 'iahfahfahashvai', 0, '', '2016-12-20 
14:32:17');

【问题讨论】:

【参考方案1】:

如果接收列是TIMESTAMP,则需要设置NLS_TIMESTAMP_FORMAT,而不是NLS_DATE_FORMAT

【讨论】:

【参考方案2】:

你可以尝试使用timestamp'YYYY-MM-DD HH24:MI:SS'的格式

在该示例中insert 声明,例如

timestamp'2016-12-20 14:32:17' 用于grantApprovalDate 列。

Demo

【讨论】:

以上是关于oracle Alter Session NLS FORMAT for bulk insert statements - 行为不符合预期的主要内容,如果未能解决你的问题,请参考以下文章

如何仅保留某个数据库的 Alter Session Set 变量?

Oracle-Alter-Session

Oracle数据库插入日期格式字符串给date类型字段,nls_date_format参数值作用

Oracle SQL - 在同一个 alter_session_set_clause 中为多个参数设置值

oracle for update锁表资源释放之kill -9和alter system kill session 'sid,serial#';

oracle sql 最近5个季度的最后一天