在Oracle中插入后触发插入sysdate

时间:2010-11-22 17:25:58

标签: sql oracle triggers

我尝试使用以下内容,但显然它是无效的SQL:

CREATE OR REPLACE TRIGGER QUESTION_DATE BEFORE INSERT ON QUESTION 
FOR EACH ROW
BEGIN
INSERT INTO QUESTION(CREATED_TIMESTAMP) 
VALUES (SYSDATE);
END;

到目前为止,问题表看起来像这样:

CREATE TABLE QUESTION
(   
    QUESTION_ID             INTEGER not null,
    LATEST_QUESTION         INTEGER not null,
    CREATED_USER_ID         INTEGER not null,
    CREATED_TIMESTAMP       TIMESTAMP not null,     
    CONSTRAINT PK_QUESTION  PRIMARY KEY (QUESTION_ID)
);

CREATE SEQUENCE QUESTION_ID_SEQ INCREMENT BY 1 START WITH 1 NOCYCLE NOCACHE NOORDER;

CREATE TRIGGER QUESTION_INSERT BEFORE INSERT ON QUESTION 
FOR EACH ROW
BEGIN
SELECT QUESTION_ID_SEQ.nextval
INTO :new.QUESTION_ID
FROM dual;
END;

我正在使用Toad for Oracle V9.0.1.8,如果这是相关的

3 个答案:

答案 0 :(得分:18)

不要使用触发器在Oracle中设置默认值。而是在列上使用“DEFAULT”。 这是一个简短的专栏

CREATED_TIMESTAMP  TIMESTAMP  DEFAULT SYSDATE  NOT NULL,

答案 1 :(得分:12)

我想你可能想要这个:

CREATE OR REPLACE TRIGGER QUESTION_DATE BEFORE INSERT ON QUESTION 
FOR EACH ROW
BEGIN
 :NEW.CREATED_TIMESTAMP := SYSDATE;
END;

你的触发器试图在QUESTION中插入另一行,这会触发触发器......

答案 2 :(得分:1)

:new.created_timestamp:= sysdate

而不是插入。

插入已经发生,无需再次进行。

您还可以使sysdate成为列的默认值,但这样可以在insert语句中覆盖该值。