написать триггер

yaro83
Дата: 04.10.2004 14:55:38
Помогите PLS создать следующий триггер.

Есть таблица T1. Необходимо сделать так, чтобы из нее нельзя было удалять строки. Думаю, что надо сделать триггер, который бы перехватывал DELETE и не делал бы ничего. Только как написать его, я не знаю - help :)

Спасибо
micp
Дата: 04.10.2004 14:57:33
CREATE OR REPLACE TRIGGER my_trig
BEFORE DELETE ON t1 FOR EACH ROW
BEGIN
raise_application_error(-2000,'нельзя удалять из ентой таблички!!')
END;
softwarer
Дата: 04.10.2004 14:58:11
Если именно на триггере, то этот триггер должен делать

raise_application_error (-20100, 'Нельзя удалять строки из этой таблицы');

В принципе, можно попробовать написать триггер instead of. Но таких извращений не делал, сейчас посмотрю, что при этом будет.
softwarer
Дата: 04.10.2004 15:02:08
Да. Триггер instead of на таблицу Оракл сделать не разрешает. Так что либо вариант выше - при этом удаление будет ругаться - либо updateable view с триггером instead of. Там уже можно написать игнорирование удалений - так, чтобы оно в действительности не происходило.

Хм. Можно, конечно, написать триггер, который при удалении записи будет вставлять ее копию :) Тут, правда, будут побочные эффекты - например, с внешними ключами.
yaro83
Дата: 04.10.2004 15:04:01
А что это можно и не триггером это делать?

Что такое
micp
-2000
?



Что такое
softwarer
instead of
?
micp
Дата: 04.10.2004 15:05:20
типа код ошибки.
yaro83
Дата: 04.10.2004 15:06:58
micp
CREATE OR REPLACE TRIGGER my_trig
BEFORE DELETE ON t1 FOR EACH ROW
BEGIN
raise_application_error(-2000,'нельзя удалять из ентой таблички!!')
END;


А можно не так написать, а без исключения

CREATE OR REPLACE TRIGGER my_trig
BEFORE DELETE ON t1 FOR EACH ROW
BEGIN
--raise_application_error(-2000,'нельзя удалять из ентой таблички!!')
END;

? Или это плохим стилем будет?
softwarer
Дата: 04.10.2004 15:08:22
softwarer
Дата: 04.10.2004 15:09:45
yaro83
Или это плохим стилем будет?

Это будет плохо, но более существенно то, что это не будет работать.

P.S. По той ссылке, которую я указал, можно найти еще много интересного :) Это намек :)
micp
Дата: 04.10.2004 15:10:38
хуже того это не скомпилится. поставь тогда хоть
null;
между бегин - енд
только он разрешит удалять из ентой таблички. Нафига тогда триггер? Можно его тогда грохнуть. Желательно вместе с таблицей. И базой тоже :-)