员工表的结构:
Name Null? Type
------------- -------- ------------
EMPLOYEE_ID NOT NULL NUMBER(38)
FIRST_NAME VARCHAR2(50)
LAST_NAME VARCHAR2(50)
EMAIL VARCHAR2(50)
DEPT_ID NUMBER(38)
SALARY NUMBER(38)
COMMISION_PCT FLOAT(126)
HIREDATE DATE
INSERT
声明:
insert into employees_table
values (05,'Sophie','Kuchinskey','sophiekuchinskey@yahoo.com',105,5000000,60,'20-sept-1994');
第1行的错误: ORA-01841 :(完整)年份必须介于-4713和+9999之间,而不是0
答案 0 :(得分:4)
当使用TO_DATE
的值作为格式掩码将Oracle插入DATE
列时,Oracle会对非日期文字执行隐式NLS_DATE_FORMAT
。如果非日期文字与此格式匹配,那么它将起作用(如果它没有,那么它会赢得) - 但是,如果NLS_DATE_FORMAT
被更改,那么它将立即中断(任何调试是一件非常痛苦的事情,因为正在运行的代码不会发生,但没有人会更改代码。
您可以通过查询找到当前的NLS_DATE_FORMAT
:
SELECT VALUE
FROM NLS_SESSION_PARAMETERS
WHERE PARAMETER = 'NLS_DATE_FORMAT';
最好使用正确的格式掩码明确使用TO_DATE
或使用ANSI日期文字(即DATE '2014-12-01'
)。
insert into employees_table
values(
05,
'Sophie',
'Kuchinskey',
'sophiekuchinskey@yahoo.com',
105,
5000000,
60,
TO_DATE( '20-sep-1994', 'DD-Mon-YYYY' )
);
或者,使用与语言环境/语言无关的ANSI格式:
insert into employees_table
values(
05,
'Sophie',
'Kuchinskey',
'sophiekuchinskey@yahoo.com',
105,
5000000,
60,
DATE '1994-09-20'
);
答案 1 :(得分:0)
请将日期转换为正确的日期格式
insert into employees_table values(05,'Sophie','Kuchinskey','sophiekuchinskey@yahoo.com',105,5000000,60,to_date('20-sep-1994','dd-Mon-YYYY'));
你也不能把月份作为9月。应该是sep。