2015-04-09 6 views
-2

Привет, ребята, я пытаюсь создать триггер для проверки некоторых данных, у меня есть таблица под названием «События», и мне нужно создать триггер, который даст мне ошибку при попытке добавить событие в июль.Trigger in oracle SQL - проверка?

CREATE OR REPLACE TRIGGER concert_trigger AFTER INSERT ON CONCERT WHEN (event_date = 'July') BEGIN ALTER TABLE CONCERT ADD CONSTRAINT chk_CONCERT CHECK (event.date ='July') END;

Вот триггер, который я начал, что я думаю, что это путь, но я не уверен, если это правильно.

Спасибо, Leprejohn

+2

Во-первых, почему вы хотите использовать триггер, а не ограничение? Если вы можете использовать ограничение, это почти всегда полезно сделать, а не использовать триггер. Во-вторых, ваш триггер пытается создать ограничение - это не имеет смысла. Ограничение создается один раз во время установки. Триггер запускается каждый раз, когда происходит «INSERT». Было бы бессмысленно создавать ограничение каждый раз, когда происходит «INSERT». Каков тип данных столбца 'event_date'? Это «дата»? «Varchar2»? Что-то другое? –

+0

Привет, Джастин, для модуля, который я делаю, и они хотят, чтобы вы использовали триггеры, не уверен, почему, но ограничения кажутся гораздо лучшей идеей сделать это при создании данных или вводе типа данных для столбца event_date является дата – leprejohn

+2

«Модуль» означает «домашнее задание» правильно? Если вы выполняете домашнее задание на триггеры, я предполагаю, что в книге будет раздел, в котором обсуждается разница между триггерами уровня и триггерами на уровне инструкций. Для проверки достоверности данных вам понадобится триггер уровня, заголовок, который вы разместили здесь, для триггера уровня инструкций. Я предполагаю, что книга также охватывает некоторые вводные концепции PL/SQL - вам понадобится инструкция 'IF', вы хотите использовать' to_char' или 'extract', чтобы получить месяц из' event_date', и вы «Я хочу использовать' raise' или 'raise_application_error' для исключения исключения –

ответ

1

С вашей классной требует использования триггера вы хотите сделать что-то вроде

CREATE OR REPLACE TRIGGER CONCERT_BI 
    BEFORE INSERT ON CONCERT 
    FOR EACH ROW 
BEGIN 
    IF TO_CHAR(EVENT_DATE, 'MON') = 'JUL' THEN 
    RAISE_APPLICATION_ERROR(-20666, 'No concerts can be scheduled in July'); 
    END IF; 
END CONCERT_BI; 

Здесь я предполагаю, что event_date является фактическое DATE вместо символа строка; если это было плохое предположение, измените сравнение соответствующим образом.

Делитесь и наслаждайтесь.