Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Триггер который срабатывает на определенное количество (insert/update..)  [new]
KINGSTON_NN
Guest
Доброе утро...возник вопрос о возможной реализации срабатывания триггера при условии нескольких insert/update..и в связи с этим вопрос каким способом это возможно реализовать
11 дек 08, 09:49    [6554437]     Ответить | Цитировать Сообщить модератору
 Re: Триггер который срабатывает на определенное количество (insert/update..)  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18484
Нескольких в одной сессии или во всех?
11 дек 08, 09:55    [6554461]     Ответить | Цитировать Сообщить модератору
 Re: Триггер который срабатывает на определенное количество (insert/update..)  [new]
KINGSTON_NN
Guest
Нескольких в одной сессии.
11 дек 08, 10:50    [6554781]     Ответить | Цитировать Сообщить модератору
 Re: Триггер который срабатывает на определенное количество (insert/update..)  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18351
KINGSTON_NN
Нескольких в одной сессии.

insert into my_table select ... from all_objects
это сколько insert-ов?
11 дек 08, 10:54    [6554823]     Ответить | Цитировать Сообщить модератору
 Re: Триггер который срабатывает на определенное количество (insert/update..)  [new]
KINGSTON_NN
Guest
возможно что это несколько инсертов в одной сессии
11 дек 08, 16:01    [6557587]     Ответить | Цитировать Сообщить модератору
 Re: Триггер который срабатывает на определенное количество (insert/update..)  [new]
--Eugene--
Member

Откуда: Боярышник
Сообщений: 2170
создаешь процедурку, которая будет выполняться после N-ного инсерта create procedure my_proc...
создаешь какую-то отвлеченную секвенцию
создаешь триггер before insert for each row на свою таблицу
в этом триггере дергаешь свою секвенцию select my_seq.nextval into x
если mod(x, <необходимое количество инсертов>) = 0, значит дергаешь свою процедурку my_proc

вот че-то вроде того...
11 дек 08, 16:06    [6557654]     Ответить | Цитировать Сообщить модератору
 Re: Триггер который срабатывает на определенное количество (insert/update..)  [new]
Пилот Пиркс
Member

Откуда: Москва
Сообщений: 352
--Eugene--
создаешь процедурку, которая будет выполняться после N-ного инсерта create procedure my_proc...
создаешь какую-то отвлеченную секвенцию
создаешь триггер before insert for each row на свою таблицу
в этом триггере дергаешь свою секвенцию select my_seq.nextval into x
если mod(x, <необходимое количество инсертов>) = 0, значит дергаешь свою процедурку my_proc

вот че-то вроде того...


А если сиквенс будут дёргать несколько сессий? Получится косяк. Чтоб его избежать, количество вызов тригера лучше хранить в переменной пакета.
11 дек 08, 16:15    [6557744]     Ответить | Цитировать Сообщить модератору
 Re: Триггер который срабатывает на определенное количество (insert/update..)  [new]
--Eugene--
Member

Откуда: Боярышник
Сообщений: 2170
это я написал для неважно какой сессии.

а если надо чтобы подсчет велся только для текущей сессии, то для этого можно использовать какую-нибудь переменную какого-нибудь пакета
11 дек 08, 16:16    [6557754]     Ответить | Цитировать Сообщить модератору
 Re: Триггер который срабатывает на определенное количество (insert/update..)  [new]
--Eugene--
Member

Откуда: Боярышник
Сообщений: 2170
--Eugene--,

а можно поступить так:

create package p
as
function f
	return int;
end;

create package body p
as
x int := 0;
c constant int := 10000;
function f
	return int
is
begin
	x := x + 1;
	if mod(x, c) = 0 then
		return 1;
	end if;
	return 0;
end;
end;

create or replace trigger t
before update
on my_table
for each row
when (p.f() != 0)
begin
	/* а тут пишеть то, че надо чтобы срабатывало через каждые 10000 insert-ов */
end;
11 дек 08, 16:26    [6557852]     Ответить | Цитировать Сообщить модератору
 Re: Триггер который срабатывает на определенное количество (insert/update..)  [new]
--Eugene--
Member

Откуда: Боярышник
Сообщений: 2170
опечатался с before update :)
11 дек 08, 16:27    [6557862]     Ответить | Цитировать Сообщить модератору
 Re: Триггер который срабатывает на определенное количество (insert/update..)  [new]
KINGSTON_NN
Guest
спасибо, надеюсь для динамического варианта сценарий не сильно изменится)
12 дек 08, 11:34    [6561560]     Ответить | Цитировать Сообщить модератору
 Re: Триггер который срабатывает на определенное количество (insert/update..)  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
имхо, сабж. есть верный способ заработать бесплатный гемр.
вот делали-сделали.. срабатывает на ~десятый а на ~пятом - данные кончились
(или кабелина упала и disconnect зашел в студию.
ну и хрен с ними, с данными..

подумайте, мож хотябы ~ возле коммита ваш алгоритм-из-триггера поселить
12 дек 08, 11:46    [6561650]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить