В настоящее время я пишу сценарий PLSQL, который должен фиксировать каждый раз, когда в таблице происходит одно из событий DML. Я пытаюсь сделать все это в одном триггере, чтобы зафиксировать эти события, не разделяя их на три отдельных триггера, если это возможно. Какие-либо предложения?
Существует ли пакет, предлагаемый Oracle для получения событий/действий, когда в конкретной таблице произошли операции INSERT, UPDATE или DELETE?
comment
вы пишете сценарий PLSQL с использованием Java?
- person user85421   schedule 02.08.2019
Ответы (2)
Вот пример; dbms_output
вызов, вероятно, не то, что вы хотите сделать, но - вы никогда не говорили, чего вы хотите. Может, что-то записываете? Установите его самостоятельно, это просто для того, чтобы показать, как это сделать.
SQL> create table test (id number, name varchar2(20));
Table created.
SQL>
SQL> create or replace trigger trg_biud_test
2 before insert or update or delete on test
3 for each row
4 begin
5 if inserting then
6 dbms_output.put_line('Inserting');
7 elsif updating then
8 dbms_output.put_line('Updating');
9 elsif deleting then
10 dbms_output.put_line('Deleting');
11 end if;
12 end;
13 /
Trigger created.
SQL> set serveroutput on
SQL> insert into test (id, name) values (1, 'Little');
Inserting
1 row created.
SQL> update test set name = 'Foot' where id = 1;
Updating
1 row updated.
SQL> delete from test where id = 1;
Deleting
1 row deleted.
SQL>
person
Littlefoot
schedule
02.08.2019
зачем нужны отдельные триггеры, когда это можно сделать через один на все действия?
- person Himanshu Ahuja; 02.08.2019
@HimanshuAhuja - Какие отдельные триггеры? Это всего лишь один триггер.
- person Justin Cave; 02.08.2019
Я не прошу этот конкретный ответ/запрос, а вообще.
- person Himanshu Ahuja; 02.08.2019
Как обычно, одну и ту же задачу можно решить несколькими способами. Это простой пример. Представьте, что реальный код сложен и занимает, например. 50 строк. Втрое больше, и у вас есть 150 строк. Некоторые люди предпочитают поддерживать более простые блоки кода (те, которые соответствуют их экрану), поэтому они разбивают его на 3 отдельных триггера. С другой стороны, вы бы все равно не помещали так много кода в триггеры - вместо этого создайте процедуры (и поместите их в пакет, когда мы этим займемся) и вызовите их из триггеров.
- person Littlefoot; 02.08.2019
хм... достаточно справедливо только то, что он занимает больше места, хотя менее сложный - единственная причина в основном.
- person Himanshu Ahuja; 02.08.2019
почему бы не отобразить сообщение или не поймать значение в самом триггере, что означало бы, что вставка/обновление/удаление произошло.
обратитесь к этому Создайте один триггер для нескольких операций
person
Himanshu Ahuja
schedule
02.08.2019