Здравствуйте!
У меня в Oracle PL/SQL есть такая таблица:
Это таблица выстрелов. У меня есть люди, которые участвуют в соревновании по меткости в стрельбе. Колонка name описывает имя стрелка, колонка x показывает координату точки попадания пули x, а колонка y показывает координату точки попадания пули y. Подразумевается, что данные будут вноситься сразу по три строчки после того, как выстреливает каждая команда, состоящая из 3 человек. Вот как выглядит запрос вставки результатов выстрела:
insert all
into shots (name, x, y)
values ('Bill', 12, 61)
into shots (name, x, y)
values ('Marat', 150, 85)
into shots (name, x, y)
values ('Ivan', 18, 13)
select * from dual;
И тут есть одно ограничение. Нельзя записывать в таблицу результат, в котором x > 120. Поэтому был написан триггер, который отменяет вставку строки, у которой x > 120. Вот его код:
create or replace trigger delet_shot
before INSERT on shots
for each row
begin
if (:new.x > 120) then
raise_application_error(-20000, 'Стрелок не попал в мишень');
end if;
end;
И теперь, собственно, в чём суть вопроса. Когда я выполняю вставку в таблицу, продемонстрированную выше, у меня из-за того, что в запросе присутствует строка, которая не может быть вставлена из-за триггера, не вставляются две остальные строки (1 и 3), которые правильные и под действия триггера не подпадают. Скажите пожалуйста, как это исправить и написать триггер, который в одной вставке будет пускать все правильные строки и не пускать неправильные. То есть, чтобы 1 и 3 строка, так как они правильные, были вставлены в таблицу, а 2 строка не была вставлена, так как она неправильная. Спасибо!