Oracle триггер - проверка по уже существующим данным - PullRequest
0 голосов
/ 02 декабря 2011

Я хочу проверить время, которое вводится, чтобы узнать, не прошло ли оно 2 часа с момента сохранения каких-либо других встреч.

Моя таблица тестовая (идентификатор, номер и дата теста, метка времени)

У меня есть триггер, который проверяет, находится ли новое время в течение 2 часов после указанного мной времени

create or replace trigger "TEST_T1"
BEFORE
insert on "TEST"
for each row
when (new.testdate is not null)
begin
    if (:new.testdate BETWEEN (to_timestamp('12-AUG-12 02:00:00PM') - interval '120'   minute) 
                      AND (to_timestamp('12-AUG-12 02:00:00PM')  + interval '120' minute))
    then raise_application_error(-20634, 'This time clashes with another event.');
    end if;
end;

Можно ли заменить указанное мной время временем из базы данных?

С помощью Михаила Повага - ниже - мне удалось заставить это работать, используя

create or replace trigger "TEST_T1"
BEFORE
insert on "TEST"
for each row
when (new.testdate is not null)
begin
    DECLARE l_exists INTEGER;
    BEGIN
        SELECT COUNT(*) INTO l_exists FROM test WHERE testdate BETWEEN :new.testdate - interval '120' minute AND :new.testdate + interval '120' minute AND ROWNUM = 1;
        IF l_exists = 1 THEN raise_application_error(-20634, 'This time clashes with another event.');
        END IF;
    END;
END;

1 Ответ

1 голос
/ 02 декабря 2011
create or replace trigger "TEST_T1"
BEFORE
insert on "TEST"
for each row
when (new.testdate is not null)
begin
    declare qty integer := 0;
    begin
        select count(*) into qty from test where testdate between (:new.testdate - 2/24) and (:new.testdate + 2/24) and rownum = 1;
        if qty > 0 then
            raise_application_error(-20634, 'This time clashes with another event.');
        end if;
    end;
end;

пс.пожалуйста, учтите, что я не являюсь разработчиком Oracle, поэтому могут быть ошибки, но я думаю, что это путь: -)

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