[英]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.