简体   繁体   English

在Oracle中插入后触发插入sysdate

[英]Trigger to insert sysdate after an insert in Oracle

I tried using the following but apparently it's invalid SQL: 我尝试使用以下内容,但显然这是无效的SQL:

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

The Question table looks like this so far: 到目前为止,问题表看起来像这样:

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;

I'm using Toad for Oracle V9.0.1.8 if that's relevant 我正在使用Toad for Oracle V9.0.1.8(如果相关)

Dont use a trigger to set a default value in Oracle. 不要使用触发器在Oracle中设置默认值。 Instead, use "DEFAULT" on the column. 而是在列上使用“ DEFAULT”。 Here is an exmple column 这是一个示例列

CREATED_TIMESTAMP  TIMESTAMP  DEFAULT SYSDATE  NOT NULL,

I think you probably want this: 我想您可能想要这样:

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

Your trigger tries to insert another row into QUESTION, which would fire the trigger and... 您的触发器尝试将另一行插入QUESTION,这将触发触发器并...

:new.created_timestamp := sysdate :new.created_timestamp:= sysdate

Instead of insert. 而不是插入。

The insert is already occurring, no need to do it again. 插入已在发生,无需再次执行。

You could also make sysdate the default for the column, but that would allow for the value to be overridden in the insert statement. 您也可以将sysdate设置为该列的默认值,但这将允许在insert语句中覆盖该值。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM