-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.

4

1 回答 1

1

当您有一DATE列时,您应该始终插入 a DATE,而不是 a 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语句在将来工作,如果您将新列添加到表中。由于dnumberis a NUMBER,我还将INSERT语句更改为插入数字而不是插入字符串(同样,如果不需要,请不要依赖隐式转换)。我没有更正明显的错误,即您有一个CHAR(9)代表社会安全号码的列,您正在为其插入 5 个字符的字符串。

于 2013-06-20T09:43:48.240 回答