下面的代码给出错误:
" ORA-01821:日期格式未被识别"
但为什么??
INSERT INTO SALES_ORDER_C_B1_027 (ORDER_NO,ORDER_DATE,CLIENT_NO,DELYTYPE,BILLYN,SALESMAN_NO,DELYDATE,ORDER_STATUS)
VALUES('O19001',TO_DATE('12-JAN-96','DD-MMM-YY'),'C00001','F','N','S00001',TO_DATE('20-JAN-96' ,'DD-MMM-YY'),'IN PROCESS');
CREATE TABLE SALES_ORDER_C_B1_027
(
ORDER_NO VARCHAR(6) PRIMARY KEY,
CLIENT_NO VARCHAR(6),
ORDER_DATE DATE,
DELYADDR VARCHAR(25),
SALESMAN_NO VARCHAR(6),
DELYTYPE CHAR(1) DEFAULT 'F',
BILLYN CHAR(1),
DELYDATE DATE,
ORDER_STATUS VARCHAR(10),
CHECK(ORDER_NO LIKE 'O%'),
CHECK(DELYTYPE IN('P','F')),
CHECK(DELYDATE>ORDER_DATE),
CHECK(ORDER_STATUS IN('IN PROCESS','FULFILLED','BACK ORDER','CANCELLED')),
FOREIGN KEY (CLIENT_NO) REFERENCES CLIENT_MASTER_C_B1_027(CLIENT_NO),
FOREIGN KEY (SALESMAN_NO) REFERENCES SALESMAN_MASTER_C_B1_027(SALESMAN_NO)
);
答案 0 :(得分:2)
00-49
是问题所在。你想要MMM
。但是,我会使用MON
关键字:
DATE
答案 1 :(得分:1)
使用'DD-MON-RR'
或'DD-MM-RRRR'
代替'DD-MMM-YY'
作为日期格式。
在您的情况下,您最好使用rr
代替yy
的日期格式。这种格式与2k(千年)问题有关。例如,当您输入96
时,您会获得1996
(本世纪的第二部分" 50-99
和#34;之间的年份),以及当您输入{{1}时你得到05
(世纪的第二部分和#34;年2005
和#34之间的一年;)
答案 2 :(得分:1)
ORA-1821的直接原因是错误的日期格式:值12-JAN-96
掩码应为DD-MON-YY
,而不是DD-MMM-YY
。
之后您的语句将起作用,但它包含其他两个错误。首先,我怀疑你是否提到了2096年,所以你应该使用四位数格式而不是两位数字格式。接下来,它将使用一个NLS设置,而其他人则取决于日期语言。
这就是为什么在你的情况下最好的决定是使用日期文字并将日期值写为DATE '1996-01-12'
而没有任何to_date'