我做了以下事情:
CREATE TABLE BOOK(
BOOK_ID VARCHAR(4) PRIMARY KEY,
ISBN_10 VARCHAR(10),
TITLE VARCHAR(50),
CATEGORY VARCHAR(25),
PRICE DECIMAL(6,2),
BINDING VARCHAR(2),
PUB_DATE DATE,
AUTHOR_ID SMALLINT,
PUBLISHER_ID SMALLINT
);
2
ALTER SESSION SET nls_date_format = 'DD-MM-YYYY HH24:MI:SS';
3
INSERT INTO BOOK
VALUES('4','123459','INTRODUCTION TO SmallTalk','IT',157.00,'S',**'26-01-1991'**,13,103);
它出现错误: ORA-01843:无效月份
但是,如果跟随,则没有问题:
查询:
INSERT INTO
BOOK
VALUES('4','123459','INTRODUCTION TO Small Talk','IT',157.00,'S','**26-JAN-1991**',13,103);
任何人都可以解释原因吗?
答案 0 :(得分:5)
您想阅读本手册的Datetime Literals部分。替代方案是:
DATE '1991-01-26'
TO_DATE('26-01-1991', 'DD-MM-YYYY')
如果您设置NLS_DATE_FORMAT
,则可以省略TO_DATE()
的第二个参数,但不能完全跳过该功能。
答案 1 :(得分:3)
它对我有用。这意味着你的alter语句由于某种原因不起作用。但是,在使用文字时,假设系统上的特定日期格式是不好的做法。相反,在插入上使用格式掩码强制转换文字,例如:
INSERT INTO BOOK
VALUES('4','123459','INTRODUCTION TO Small Talk','IT',157.00,'S',
to_date('26-JAN-1991','DD-MON-YYYY'), 13,103);
(或您需要的任何格式作为文字输入值)
答案 2 :(得分:1)
这是因为在您的数据库中,nls_date_time被设置为' DD-MON-RRRR'格式,您可以使用
select * from V$NLS_PARAMETERS
在此查询中
INSERT INTO BOOK VALUES('4','123459','INTRODUCTION TO SmallTalk','IT',157.00,'S','26-01-1991',13,103);
日期格式为' dd-mm-rrrr',将语句更改为
INSERT INTO BOOK VALUES('4','123459','INTRODUCTION TO SmallTalk','IT',157.00,'S',to_date('26-01-1991', 'dd-mm-rrrr'),13,103);
并且它也将运行,因为您现在已经提供了日期格式。
答案 3 :(得分:0)
设置
时ALTER SESSION SET nls_date_format = 'DD-MM-YYYY HH24:MI:SS';
然后你的插入必须符合这种格式,即
INSERT INTO BOOK VALUES('4','123459','INTRODUCTION TO SmallTalk','IT',157.00,'S',
'26-01-1991 00:00:00'
,13,103);
但是,更安全的方法是使用日期文字或TO_DATE函数。
答案 4 :(得分:-1)
你只需要使用
INSERT INTO TABLE_NAME VALUES('07-JAN-96');
Oracle始终采用"DD-MMM-YY"
格式。您应该将月份写为月份名称的前3个字符。