SQL 错误:ORA-01843:不是有效月份

Posted

技术标签:

【中文标题】SQL 错误:ORA-01843:不是有效月份【英文标题】:SQL Error: ORA-01843: not a valid month 【发布时间】:2017-10-12 04:34:32 【问题描述】:

我在运行下面的插入命令时收到 ORA-01843。我的代码有问题吗?并收到以下错误消息:

SQL 错误:

ORA-01843: not a valid month
ORA-06512: at "MDSYS.SUPERHEROES_AUDIT", line 8
ORA-04088: error during execution of trigger 'MDSYS.SUPERHEROES_AUDIT'
01843. 00000 -  "not a valid month"

我的声明似乎有什么问题?谢谢。

 /* TABLE CREATED */

    CREATE TABLE EVENTLOGS(
        Eventlog_id   Number(3,0)   NOT NULL,
        User_name     Varchar2(20),
        Date_done     Date,
        Action_done   Varchar2(50),
    CONSTRAINT PK_EVENTLOGS PRIMARY KEY (Eventlog_id));

    /* SEQUENCE CREATED */

    CREATE SEQUENCE EVENTLOG_ID_SEQ
      MINVALUE 1
      START WITH 1
      INCREMENT BY 1
      NOCYCLE
      CACHE 10;

    /* TRIGGER CREATED */

    CREATE OR REPLACE TRIGGER SUPERHEROES_AUDIT
    AFTER INSERT OR DELETE OR UPDATE ON SUPERHEROES
    FOR EACH ROW
    ENABLE
    DECLARE
      V_LOGID NUMBER;
      V_USER  VARCHAR(30);
      V_DATE  VARCHAR(30);
    BEGIN
      SELECT EVENTLOG_ID_SEQ.NEXTVAL, USER, TO_CHAR(SYSDATE, 'DD/MM/YYYY HH24:MI:SS') INTO V_LOGID, V_USER, V_DATE FROM DUAL;
      IF INSERTING THEN
        INSERT INTO EVENTLOGS(Eventlog_id, User_name, Date_done, Action_done)
        VALUES (V_LOGID, V_USER, V_DATE, 'INSERT');
    END IF;
    END;
    /


    INSERT INTO SUPERHEROES VALUES ('TEST');

【问题讨论】:

【参考方案1】:

您在表中的列定义为

Date_done     Date,

您将日期存储到 VARCHAR2 变量中

V_DATE  VARCHAR(30);
....
SELECT EVENTLOG_ID_SEQ.NEXTVAL, USER, 
TO_CHAR(SYSDATE, 'DD/MM/YYYY HH24:MI:SS') INTO V_LOGID, V_USER, V_DATE
...

您正在将此变量插入到DATE 列中。

...
VALUES (V_LOGID, V_USER, V_DATE, 'INSERT');

保持datatype 一致以避免混淆。

【讨论】:

谢谢@Kaushik Nayak。这是有道理。我对变量的声明进行了更正并成功编译。当我尝试插入时,它插入成功,但是当我检查 eventlogs 表时,eventlogid 从 9 而不是 1 开始。知道吗? 知道为什么 eventlogid 从 9 而不是 1 开始吗? @Kaushik Nayak 当你使用 seq.nextval 时,它总是会增加 Sequence 的当前值。

以上是关于SQL 错误:ORA-01843:不是有效月份的主要内容,如果未能解决你的问题,请参考以下文章

Python 操作Redis

python爬虫入门----- 阿里巴巴供应商爬虫

Python词典设置默认值小技巧

《python学习手册(第4版)》pdf

Django settings.py 的media路径设置

Python中的赋值,浅拷贝和深拷贝的区别