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 :(得分: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') );
我还修改了语句以列出列,这通常是一种很好的做法,因为它确保您不必每次都查找表中列的物理顺序,因为它允许{{1}如果向表中添加新列,将来的语句将起作用。由于INSERT
是dnumber
,我还更改了NUMBER
语句以插入数字而不是插入字符串(同样,如果不需要,也不要依赖隐式转换所以)。我没有纠正你有一个INSERT
列代表你要插入5个字符串的社会安全号的明显错误。