如何在Oracle 10g xe中插入日期?

时间:2014-01-16 16:33:31

标签: oracle oracle-xe

我做了以下事情:

  1.   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. 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);
    

    任何人都可以解释原因吗?

5 个答案:

答案 0 :(得分:5)

您想阅读本手册的Datetime Literals部分。替代方案是:

  • 使用日期文字:DATE '1991-01-26'
  • 从字符串转换:TO_DATE('26-01-1991', 'DD-MM-YYYY')

如果您设置NLS_DATE_FORMAT,则可以省略TO_DATE()的第二个参数,但不能完全跳过该功能。

另请参阅:Datetime Format Models

答案 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个字符。