В этой статье показано, как использовать ТРИГГЕР ПОСЛЕ УДАЛЕНИЯ
, он сработает после выполнения операции удаления. В реальных жизненных сценариях он в основном используется для таких целей, как:
- Аудит или ведение журнала
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 |
Рекомендации
- Создание триггера DML: Примеры
- Триггеры PL/SQL: – Официальные документы Oracle
- Oracle PL/SQL – Пример триггера перед удалением
Оригинал: “https://mkyong.com/oracle/oracle-plsql-after-delete-trigger-example/”