2014-04-28 5 views
0
CREATE OR REPLACE TRIGGER CRIMEDATE 
    BEFORE INSERT or UPDATE of DATE_CLOSED 
    ON CRIME 
    for each row 
    declare :new.date_closed 

BEGIN 

    if (:new.date_closed < crime_date) then raise_application_error(-20002, 'Date Closed must be after crime date'); 
    end if; 
END; 

Я пытаюсь создать триггер, который будет срабатывать, если дата, введенная для date_closed является до фактической даты преступления, но я держать gettng следующее сообщение об ошибке:Oracle триггер на дату

Error at line 1: PLS-00103: Encountered the symbol "" when expecting one of the 
    following: begin function pragma procedure subtype type <an identifier> <a double-quoted 
    -identifier> current cursor delete exists prior The symbol "" was ignored. 0.06 seconds 

Я пытались веками понять это, может ли кто-нибудь помочь? спасибо

+1

Вы забыли 'new' при обращении к' crime_date': ': new.date_closed <: new.crime_date'. Но контрольное ограничение было бы намного более эффективным. –

+0

Я пробовал это, но теперь я получаю эту ошибку: Ошибка в строке 1: PLS-00103: Обнаружен символ «» при ожидании одного из следующего: begin function pragma procedure тип подтипа <идентификатор><двойное кавычки -identifier> текущий курсор delete существует раньше Символ "" был проигнорирован. 0.07 секунд – user3499533

ответ

1

Попробуйте это:

CREATE OR REPLACE TRIGGER CRIMEDATE 
    BEFORE INSERT or UPDATE of DATE_CLOSED 
    ON CRIME 
    FOR EACH ROW 
BEGIN 
    IF (:new.date_closed < :new.crime_date) THEN 
     raise_application_error(-20002, 'Date Closed must be after crime date'); 
    END IF; 
END; 
+0

спасибо за предложение, но это дает мне ошибку: Ошибка в строке 2: PL/SQL: заявление игнорируется 0.05 секунд – user3499533

+0

Я его отредактировал. Pls см. – Guneli

+0

Это прекрасно работает, спасибо! – user3499533

Смежные вопросы