我正在尝试通过sqlplus
运行具有以下insert语句的脚本INSERT INTO mytable
VALUES('423234','test',NULL,'05-DEC-2012 18:30:03.000000');
INSERT INTO mytable
VALUES('2343423','test',NULL,'05-DEC-2012 18:30:03.000000');
INSERT INTO mytable
VALUES('234234','test',NULL,'05-DEC-2012 18:30:03.000000');
INSERT INTO mytable
VALUES('234234','test',NULL,'05-DEC-2012 18:30:03.000000');
INSERT INTO mytable
VALUES('2342343','test',NULL,'05-DEC-2012 18:30:04.000000');
当我运行脚本时,我收到以下错误:
ERROR at line 2:
ORA-01849: hour must be between 1 and 12
我认为这只是NLS_DATEFORMAT参数的一个问题,而我所要做的就是为会话更改它,它会起作用。问题是我无法获得正确的格式。
这是我尝试但我得到的日期格式无法识别错误
alter session set NLS_DATE_FORMAT='DD-MON-YYYY HH24:MI:SS.FF';
上述模式不适用于日期'05-DEC-2012 18:30:04.000000'
顺便说一下,脚本在SQLDeveloper上运行正常。
由于
答案 0 :(得分:5)
你很亲密,但你需要TIMESTAMP
equivalent:
alter session set NLS_TIMESTAMP_FORMAT='DD-MON-YYYY HH24:MI:SS.FF';
通常最好不要依赖NLS设置和隐式转换,而是进行显式转换:
INSERT INTO mytable
VALUES('2342343','test',NULL,
TO_TIMESTAMP('05-DEC-2012 18:30:04.000000', 'DD-MON-YYYY HH24:MI:SS.FF');
最好明确列出列,以便将来进行更改,并且更容易检查您是否按正确顺序排列值。