Триггер для вставки sysdate после вставки в Oracle - PullRequest
7 голосов
/ 22 ноября 2010

Я пытался использовать следующее, но, видимо, это недопустимый 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 для Oracle V9.0.1.8, если это актуально

Ответы [ 3 ]

18 голосов
/ 22 ноября 2010

Не используйте триггер для установки значения по умолчанию в Oracle. Вместо этого используйте «DEFAULT» в столбце. Вот примерный столбец

CREATED_TIMESTAMP  TIMESTAMP  DEFAULT SYSDATE  NOT NULL,
12 голосов
/ 22 ноября 2010

Я думаю, что вы, вероятно, хотите это:

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

Ваш триггер пытается вставить в QUESTION еще одну строку, которая вызовет триггер и ...

1 голос
/ 22 ноября 2010

: new.created_timestamp: = sysdate

Вместо вставки.

Вставка уже выполняется, повторять ее не нужно.

Вы также можете сделать sysdate значением по умолчанию для столбца, но это позволит переопределить значение в операторе вставки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...