2017-10-12 99 views
0

我在下面运行插入命令时收到ORA-01843。我的代码有问题吗?并得到了以下错误信息:SQL错误: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'); 

回答

0

,表格中的列被定义为

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一致以避免混淆。

+0

谢谢@Kaushik Nayak。这是有道理。我对变量声明进行了更正并成功编译。当我尝试插入时,它插入成功,但是当我检查eventlogs表时,eventlogid从9开始,而不是从1开始。任何想法? – Raymond

+0

You are welcome.please do read the note –

+0

任何想法为什么eventlogid从9开始而不是1开始? @Kaushik Nayak – Raymond