Консультация № 27823
17.10.2005, 03:42
0.00 руб.
0 4 4

Здравствуйте уважаемые эксперты!
Объясните пожалуйста, что такое триггеры в базаах данных.
И можно ли в их запросах использовать функцию count(мне надо написать такой триггер, который запрещал бы добавыление строк в таблицу если в одном из столбцов имеется два различных значения зависящих от значения в друго столбце.
Заранее спасибо

Обсуждение

Неизвестный
17.10.2005, 04:05
общий
это ответ
Здравствуйте, Ивченков Владислав Владимирович!
Триггеры это набор SQL команд или запросов, которые реагируют на события удаления, обновления и вставки данных в таблицу. Если есть возможность обойтись без триггера с помощью индексов или ограничений, то лучше всего триггеры не использовать, так как они сильно нагружают сервер БД и скорость работы с данной таблицой заметно падает, особенно при большом объеме данных. Что касается функции count или остальных функций и возможностей SQL, то можно использовать весь набор, который позволяет вам СУБД. Что касается вашей задачи, то ее можно будет решить с помощью ограничений. Если не справитесь пишите, по подробнее, структуру таблицы и используемую СУБД.
Удачи!
Неизвестный
17.10.2005, 09:37
общий
это ответ
Здравствуйте, Ивченков Владислав Владимирович!
Триггеры - это вид SQL запроса (хранимая процедура), которая срабатывает на события Insert, Update, Delete в базе данных без дополнительного вызова. Иными словами, когда ты вставляешь, редактируешь, удаляешь запись из/в бызу(ы), то сервер БД вызывает триггер, которые проделывает какую-то дополнительную работу, лишая тебя необходимости делать это на стороне клиента. Допустим у нас есть две таблицы. Одна зависит от значений в другой. При вставке в первую таблицу какой-то записи, триггер первой таблицы срабатывает и, обработав данные, записывает какое-то значение во вторую таблицу. Таким образом, триггеры - часть серверной логики, берущий на себя какую-то рутинную работу, избавляя клиента от такой необходимости. При этом экономится время на траффик и скорость выполнения зависит всецело от железа сервера и скорости сервера БД.

Count - агрегатная функция SQL. Почему ее нельзя использовать?
Неизвестный
17.10.2005, 11:44
общий
это ответ
Здравствуйте, Ивченков Владислав Владимирович!

Триггер принадлежащий таблице, это что-то типа хранимой процедуры, но выполняется если происходит некое событие над таблицей

ну вот что-то типа этого
CREATE TRIGGER [TRIGGER NAME] ON [dbo].[table]
FOR INSERT, UPDATE, DELETE /*собятия*/
AS

if (SELECT COUNT(*) FROM table WHERE (условие)) = (условие)
begin
(дейсвия)
end
Неизвестный
17.10.2005, 14:17
общий
это ответ
Здравствуйте, Ивченков Владислав Владимирович!
Триггеры это хранимые процедуры СУБД которые вызываются при какой то операции к таблице.например при добавлении.
create trigger bi_trigger before insert on tablename
referencing new as new old as old
for each row
declare
rowcnt integer;
begin
select count(*) into rowcnt from table1;
if rowcnt<>500 then
raise_application_error(-20001,‘Cannot Insert Row‘)
end if;
end;

Приложение:
create trigger bi_trigger before insert on tablenamereferencing new as new old as oldfor each rowdeclare rowcnt integer;beginselect count(*) into rowcnt from table1;if rowcnt<>500 thenraise_application_error(-20001,‘Cannot Insert Row‘)end if;end;
Форма ответа