2013-06-20 80 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個字符的字符串的社會安全號碼的明顯錯誤。