2010-11-22 2 views
5

Я попытался использовать следующее, но, видимо, это недопустимый SQL:Trigger для вставки SYSDATE после вставки в Oracle

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; 

Я использую Жаба для Oracle V9.0.1.8, если это отношение

+0

Дайте больше информации. Столбец, который вы пытаетесь установить для sysdate, является той же таблицей, что и строка, которую вы только что вставили? Например, если в таблице есть ColumnFirst и ColumnTheDate, вы пытаетесь установить ColumnTheDate равным sysdate для строки, которую вы только что вставили? – DwB 2010-11-22 17:31:12

+0

Yup, я пытаюсь установить ColumnTheDate для Sysdate для строки, которую я только что вставил – echoblaze 2010-11-22 17:39:59

ответ

12

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

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

Ваш триггер пытается вставить другую строку в вопрос, который бы огонь на курок и ...

+0

Я все еще получаю «ORA-00900: недопустимый оператор SQL» при попытке добавить триггер – echoblaze 2010-11-22 17:45:49

1

: new.created_timestamp: = SYSDATE

Вместо о f insert.

Вставка уже происходит, нет необходимости повторять ее снова.

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

16

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

CREATED_TIMESTAMP TIMESTAMP DEFAULT SYSDATE NOT NULL,
Смежные вопросы