Tra*_*ffy 6 sql oracle datetime insert
我正在尝试从包含日期列的.xlsx电子表格导入数据.在这些列中,日期以DD-MON-YY格式显示(例如:20-AUG-12).
当我运行导入向导时,一切都很顺利,直到我必须精确列/字段映射.我有一个免责声明说所选格式与表字段定义不匹配(我的字段是日期字段).插入脚本的示例:
INSERT INTO simulation
(simulation_id,
simulation_name,
sim_start_date,
sim_end_date,
status,
last_run_date,
moddat,
modusr,
notification_email)
VALUES (251.0,
'Proposal Test',
To_date('01-DEC-11', 'DD-MON-YY'),
To_date('31-DEC-11', 'DD-MON-YY'),
'C',
To_date('09-AUG-12', 'DD-MON-YY'),
To_date('09-AUG-12', 'DD-MON-YY'),
'Brent Weintz',
'bweintz@carlsonwagonlit.com');
Run Code Online (Sandbox Code Playgroud)
当我尝试运行此查询时,出现以下错误:
ORA-01843:无效月份01843. 00000 - "无效月份"
正如你所看到的,格式是匹配的,我无法弄清楚问题出在哪里......任何想法的人?
编辑:我的日期语言参数设置为"法语".我可以将其更改为"AMERICAN"吗?
bor*_*jab 10
尝试将NLS_DATE_LANGUAGE指定为TO_DATE函数的参数.
INSERT INTO simulation
(simulation_id,
simulation_name,
sim_start_date,
sim_end_date,
status,
last_run_date,
moddat,
modusr,
notification_email)
VALUES (251.0,
'Proposal Test',
To_date('01-DEC-11', 'DD-MON-YY', 'NLS_DATE_LANGUAGE = AMERICAN'),
To_date('31-DEC-11', 'DD-MON-YY', 'NLS_DATE_LANGUAGE = AMERICAN'),
'C',
To_date('09-AUG-12', 'DD-MON-YY', 'NLS_DATE_LANGUAGE = AMERICAN'),
To_date('09-AUG-12', 'DD-MON-YY', 'NLS_DATE_LANGUAGE = AMERICAN'),
'Brent Weintz',
'bweintz@carlsonwagonlit.com');
Run Code Online (Sandbox Code Playgroud)
当然,如果要执行一些查询,可以使用alter session更改它.
虽然您正在使用to_date
并正确格式化模型以明确转换为日期,但仍然ORA-01843
看起来问题就是问题NLS_DATE_LANGUAGE
.在这里阅读更多相关信息.
SQL> DROP TABLE t PURGE;
Table dropped.
SQL> CREATE TABLE t(A DATE);
Table created.
SQL> ALTER SESSION SET NLS_DATE_LANGUAGE='FRENCH';
Session altered.
SQL> SELECT * FROM nls_session_parameters WHERE parameter = 'NLS_DATE_LANGUAGE';
PARAMETER VALUE
-------------------- ----------
NLS_DATE_LANGUAGE FRENCH
SQL> INSERT INTO t VALUES(to_date('01-jan-2012','dd-mon-yyyy'));
INSERT INTO t VALUES(to_date('01-jan-2012','dd-mon-yyyy'))
*
ERROR at line 1:
ORA-01843: not a valid month
Run Code Online (Sandbox Code Playgroud)
因此,我遇到错误的NLS_DATE_LANGUAGE错误.我们把它设置为AMERICAN.
SQL> ALTER SESSION SET NLS_DATE_LANGUAGE='AMERICAN';
Session altered.
SQL> SELECT * FROM nls_session_parameters WHERE parameter = 'NLS_DATE_LANGUAGE';
PARAMETER VALUE
-------------------- ----------
NLS_DATE_LANGUAGE AMERICAN
SQL> INSERT INTO t VALUES(to_date('01-jan-2012','dd-mon-yyyy'));
1 row created.
SQL>
Run Code Online (Sandbox Code Playgroud)
更新 OP的编辑问题 -
我的日期语言参数设置为"FRENCH".我可以将其更改为"AMERICAN"吗?
从文档中,以下是设置NLS参数的方法.请注意优先顺序.
归档时间: |
|
查看次数: |
11010 次 |
最近记录: |