2012-11-06 44 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'给出。