2012-11-06 76 views
0

我必須創建一個表並向表中插入值。表正在創建,但不會插入值。 繼承人我的代碼 -Oracle錯誤sql

CREATE TABLE CUSTOMER(
CID   number(20) not null primary key,   
FNAME  varchar2(50) not null,     
MIDDLE  varchar2(50) null, 
LNAME  varchar2(50) not null, 
STREET  varchar2(50) not null, 
CITY  varchar2(50) not null, 
STATE  char(2) not null, 
ZIP   varchar2(5) not null, 
PHONE  varchar2(20) not null, 
BIRTH_YR date); 

INSERT INTO CUSTOMER VALUES(
'1','john','paul','connor','Broad st','newark','nj','07103','2018643110','1992'); 

我不斷收到一個錯誤

[Error] Script lines: 12-14 ------------------------ 
ORA-01861: literal does not match format string 
Script line 14, statement line 2, column 85 

有人可以幫我嗎?我究竟做錯了什麼?

回答

3

必須將表定義更改爲類似下面,讓今年的插入在您需要的格式:

CREATE TABLE CUSTOMER(
CID   number(20) not null primary key,   
FNAME  varchar2(50) not null,     
MIDDLE  varchar2(50) null, 
LNAME  varchar2(50) not null, 
STREET  varchar2(50) not null, 
CITY  varchar2(50) not null, 
STATE  char(2) not null, 
ZIP   varchar2(5) not null, 
PHONE  varchar2(20) not null, 
BIRTH_YR char(4) not null); 

否則,您必須對您的Oracle數據庫中接受了默認格式爲文本日期值。您可以使用此查詢來了解一下什麼是您的系統接受的日期格式:

SELECT * 
FROM nls_database_parameters 
WHERE parameter LIKE '%DATE%' 

對於我來說,它返回:

NLS_DATE_FORMAT  | DD-MON-RR 
--------------------------------- 
NLS_DATE_LANGUAGE | AMERICAN 

這意味着,而不是「1992」的,我應該插入值如BIRTH_YR列中的'01-Jan-1992'列:

INSERT INTO CUSTOMER 
    VALUES('1','john','paul','connor','Broad st','newark','nj','07103','2018643110', '01-Jan-1992'); 
+0

非常感謝! – ckp25

+0

'CHAR(4)'爲一年的專欄?爲什麼要這樣做? –

+0

@ypercube在這種情況下,它被認爲是可行的解決方案。如果他不打算進行日期計算,那麼它有什麼問題? – RGO

1

BIRTH_YR作爲DATE字段應該以'yyyy-MM-dd'格式'1992-01-01'給出。