Рубрики
Без рубрики

Oracle PL/SQL – Пример триггера после УДАЛЕНИЯ

– Oracle PL/SQL – Пример триггера после УДАЛЕНИЯ

В этой статье показано, как использовать ТРИГГЕР ПОСЛЕ УДАЛЕНИЯ , он сработает после выполнения операции удаления. В реальных жизненных сценариях он в основном используется для таких целей, как:

  1. Аудит или ведение журнала

1. После УДАЛЕНИЯ Триггера

В этом примере, если пользователь удалил строку medical_bills , удаленная строка будет вставлена в medical_bills_history с помощью триггера после удаления в таблице медицинские счета

1.1 Создайте таблицы и триггер.

CREATE TABLE medical_bills
(
    BILL_ID number(10) primary key,
    BILL_NUMBER varchar2(20),
    PARTY_NAME varchar2(50),
    BILL_DATE date,
    CREATED_BY varchar2(20),
    CREATED_DATE date
);
CREATE TABLE medical_bills_history
(
    BILL_ID number(10),
    BILL_NUMBER varchar2(20),
    PARTY_NAME varchar2(50),
    BILL_DATE date,
    DELETED_BY varchar2(20),
    DELETED_DATE date
);

CREATE OR REPLACE TRIGGER trg_after_delete_bill
AFTER DELETE
  ON medical_bills
  FOR EACH ROW
DECLARE
username varchar2(10);
  
BEGIN

  -- current login user, in this example, system
  SELECT user INTO username FROM dual;
	
  -- Insert OLD values in history table with username of user performing delete and sysdate as deleted_Date.
  INSERT INTO medical_bills_history VALUES(:OLD.BILL_ID,
           :OLD.BILL_NUMBER,:OLD.PARTY_NAME,:OLD.BILL_DATE,username,sysdate);
  
END;

1.2 Вставьте данные для тестирования.

INSERT INTO MEDICAL_BILLS values (1,'BILL101','Peter Thomas','12-MAY-2016','HR',sysdate);

INSERT INTO MEDICAL_BILLS values (2,'BILL102','Jemes Petil','10-JUN-2016','HR',sysdate);

INSERT INTO MEDICAL_BILLS values (3,'BILL103','Fujit su','10-JUL-2015','HR',sysdate);

1.3 Отображение данных.

select * from MEDICAL_BILLS;
1 12-МАЙ-2016 эйчар Питер Томас СЧЕТ 101 18-ИЮНЬ-2017
2 10-ИЮНЬ-2016 эйчар Жемес Петр СЧЕТ 102 18-ИЮНЬ-2017
3 10- ИЮЛЬ-2015 эйчар Фуджитсу СЧЕТ 103 18-ИЮНЬ-2017
select * from MEDICAL_BILLS_HISTORY;

-- no result

1.4 Удалить некоторые строки из таблицы МЕДИЦИНСКИЕ СЧЕТА

DELETE FROM MEDICAL_BILLS WHERE bill_id = 1;

DELETE FROM MEDICAL_BILLS WHERE bill_id = 3;

1.5 Снова отобразите данные.

select * from MEDICAL_BILLS;
2 10-ИЮНЬ-2016 эйчар Жемес Петр БИЛЛ102 18-й-2017
select * from MEDICAL_BILLS_HISTORY;
1 12-МАЫ-2016 SYSTEM Питер Томас СЧЕТ 101 18-ИЮНЬ-2017
3 10-ял-2015 SYSTEM Фуджитсу СЧЕТ 103 18-ИЮНЬ-2017

Рекомендации

  1. Создание триггера DML: Примеры
  2. Триггеры PL/SQL: – Официальные документы Oracle
  3. Oracle PL/SQL – Пример триггера перед удалением

Оригинал: “https://mkyong.com/oracle/oracle-plsql-after-delete-trigger-example/”