Существует ли пакет, предлагаемый Oracle для получения событий/действий, когда в конкретной таблице произошли операции INSERT, UPDATE или DELETE?

В настоящее время я пишу сценарий PLSQL, который должен фиксировать каждый раз, когда в таблице происходит одно из событий DML. Я пытаюсь сделать все это в одном триггере, чтобы зафиксировать эти события, не разделяя их на три отдельных триггера, если это возможно. Какие-либо предложения?


person codemonkey    schedule 02.08.2019    source источник
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
comment
зачем нужны отдельные триггеры, когда это можно сделать через один на все действия? - person Himanshu Ahuja; 02.08.2019
comment
@HimanshuAhuja - Какие отдельные триггеры? Это всего лишь один триггер. - person Justin Cave; 02.08.2019
comment
Я не прошу этот конкретный ответ/запрос, а вообще. - person Himanshu Ahuja; 02.08.2019
comment
Как обычно, одну и ту же задачу можно решить несколькими способами. Это простой пример. Представьте, что реальный код сложен и занимает, например. 50 строк. Втрое больше, и у вас есть 150 строк. Некоторые люди предпочитают поддерживать более простые блоки кода (те, которые соответствуют их экрану), поэтому они разбивают его на 3 отдельных триггера. С другой стороны, вы бы все равно не помещали так много кода в триггеры - вместо этого создайте процедуры (и поместите их в пакет, когда мы этим займемся) и вызовите их из триггеров. - person Littlefoot; 02.08.2019
comment
хм... достаточно справедливо только то, что он занимает больше места, хотя менее сложный - единственная причина в основном. - person Himanshu Ahuja; 02.08.2019

почему бы не отобразить сообщение или не поймать значение в самом триггере, что означало бы, что вставка/обновление/удаление произошло.

обратитесь к этому Создайте один триггер для нескольких операций

person Himanshu Ahuja    schedule 02.08.2019