2013-06-20 49 views
-1
create table Department 
(Dname varchar(255) NOT NULL, Dnumber int NOT NULL PRIMARY KEY, Mgr_SSN char(9) NOT NULL, Mgr_start_Date DATE); 

insert into Department values('HR', '1', '11001', '2012-04-05 10:15:00'); 

我收到错误"not valid month"
我们应该在创建表格时定义日期格式吗?
我正在使用Oracle11g我收到“无效月份”错误

+0

可能重复[here](http://stackoverflow.com/questions/17206160/oracle-how-to-use-time-and-date) – Noel

回答

1

如果您有DATE列,应始终插入DATE而不是VARCHAR2。依靠隐式转换来正确转换字符串是一个坏主意 - 不同的会话具有不同的NLS设置很容易,因此,以不同的方式执行隐式转换(导致不同的DATE或错误)。最简单的方法是使用to_date函数。

insert into Department(dname, 
         dnumber, 
         mgr_ssn, 
         mgr_start_date) 
    values('HR', 
     1, 
     '11001', 
     to_date('2012-04-05 10:15:00', 'yyyy-mm-dd hh24:mi:ss')); 

我还修改了语句中列出列,这通常是一个很好的做法,因为它可以确保你不必每次查找表中的列的物理顺序和,因为它允许INSERT声明将在未来工作,如果您将新列添加到表中。由于dnumberNUMBER,我还将INSERT语句更改为插入数字而不是插入字符串(如果不需要这样做,则不要依赖隐式转换)。我没有纠正你有一个CHAR(9)列表示你插入5个字符的字符串的社会安全号码的明显错误。