我尝试使用以下内容,但显然它是无效的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,如果这是相关的
答案 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语句中覆盖该值。