2015-05-07 4 views
0

Возможно ли запустить триггер до запуска конкретной процедуры?
Например, у меня есть пакет "A" и процедура "B" внутри упаковки "A".
Итак, когда я вызываю процедуру A.B, я хочу запустить триггер.
Я использую oracle 11gR2.Триггер ORACLE перед выполнением процедуры

+0

И что должен делать этот триггер? Какую бизнес-логику вы пытаетесь кодировать? То, что вы пытаетесь сделать, кажется, что «TRIGGER» вовсе не требуется. Вы можете использовать процедуру перед выполнением процедуры 'A.B'. –

+0

Цитировать TFM: вы можете создавать триггеры, которые срабатывают, когда происходит одна из следующих операций: инструкции DML (INSERT, UPDATE, DELETE) в конкретной таблице или представлении, выданные любым пользователем Заявления DDL (в основном, CREATE или ALTER) либо конкретной схемой/пользователем, либо какой-либо схемой/пользователем в базе данных События базы данных, такие как вход в систему/выход из системы, ошибки или запуск/завершение работы, также выдается либо конкретной схемой/пользователем, либо любой схемой/пользователем в база данных --- ни одно из этих заклинаний «вызов процедуры» –

ответ

3

Возможно ли запустить триггер до запуска конкретной процедуры?

Нет, вы не можете вручную огонь триггер без операции DML на столе. Триггеры предназначены для того, чтобы действовать неявно на любом действии DML. Trigger - это (сторона) эффект действия, а не действие в себе.

Я не думаю, что вам нужен триггер для вашего требования. Вы можете позвонить по процедуре перед началом процедуры A.B. Положите свою бизнес-логику соответственно. PL/SQL - это процедурный язык. Итак, если вы добавите еще одну процедуру процедуры C до A.B, то A.C будет выполнен до A.B.

1

Триггеры не могут быть вызваны напрямую. Вместо этого они запускаются автоматически, когда вы выполняете вставку/обновление или удаление в таблице с триггерами. Так, как и в вашем случае, при вызове процедуры A.B вы можете выполнить вставку/обновление или удаление, которые заставят запускать триггер.

0

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