mirror of
https://github.com/artagaz/bd-semestovaya.git
synced 2026-06-21 02:01:51 +07:00
78 lines
3.7 KiB
SQL
78 lines
3.7 KiB
SQL
-- 04_triggers.sql
|
|
-- Триггеры
|
|
|
|
CREATE OR REPLACE TRIGGER trg_log_suppliers
|
|
AFTER INSERT OR UPDATE OR DELETE ON suppliers
|
|
FOR EACH ROW
|
|
DECLARE
|
|
v_old CLOB; v_new CLOB; v_op VARCHAR2(10); v_pk NUMBER;
|
|
BEGIN
|
|
IF SYS_CONTEXT('USERENV', 'CLIENT_INFO') = 'SKIP_LOGGING' THEN RETURN; END IF;
|
|
|
|
IF INSERTING THEN
|
|
v_op := 'INSERT'; v_pk := :NEW.id;
|
|
v_new := JSON_OBJECT('id' VALUE :NEW.id,'name' VALUE :NEW.name,'category' VALUE :NEW.category,'contact_info' VALUE :NEW.contact_info,'has_guarantee' VALUE :NEW.has_guarantee,'contract_id' VALUE :NEW.contract_id);
|
|
ELSIF UPDATING THEN
|
|
v_op := 'UPDATE'; v_pk := :OLD.id;
|
|
v_old := JSON_OBJECT('id' VALUE :OLD.id,'name' VALUE :OLD.name,'category' VALUE :OLD.category,'contact_info' VALUE :OLD.contact_info,'has_guarantee' VALUE :OLD.has_guarantee,'contract_id' VALUE :OLD.contract_id);
|
|
v_new := JSON_OBJECT('id' VALUE :NEW.id,'name' VALUE :NEW.name,'category' VALUE :NEW.category,'contact_info' VALUE :NEW.contact_info,'has_guarantee' VALUE :NEW.has_guarantee,'contract_id' VALUE :NEW.contract_id);
|
|
ELSE
|
|
v_op := 'DELETE'; v_pk := :OLD.id;
|
|
v_old := JSON_OBJECT('id' VALUE :OLD.id,'name' VALUE :OLD.name,'category' VALUE :OLD.category,'contact_info' VALUE :OLD.contact_info,'has_guarantee' VALUE :OLD.has_guarantee,'contract_id' VALUE :OLD.contract_id);
|
|
END IF;
|
|
|
|
INSERT INTO operation_log (table_name, operation_type, record_pk, old_data, new_data)
|
|
VALUES ('SUPPLIERS', v_op, TO_CHAR(v_pk), v_old, v_new);
|
|
END;
|
|
/
|
|
|
|
CREATE OR REPLACE TRIGGER trg_log_products
|
|
AFTER INSERT OR UPDATE OR DELETE ON products
|
|
FOR EACH ROW
|
|
DECLARE
|
|
v_old CLOB; v_new CLOB; v_op VARCHAR2(10); v_pk NUMBER;
|
|
BEGIN
|
|
IF SYS_CONTEXT('USERENV', 'CLIENT_INFO') = 'SKIP_LOGGING' THEN RETURN; END IF;
|
|
|
|
IF INSERTING THEN
|
|
v_op := 'INSERT'; v_pk := :NEW.id;
|
|
v_new := JSON_OBJECT('id' VALUE :NEW.id,'name' VALUE :NEW.name,'article' VALUE :NEW.article);
|
|
ELSIF UPDATING THEN
|
|
v_op := 'UPDATE'; v_pk := :OLD.id;
|
|
v_old := JSON_OBJECT('id' VALUE :OLD.id,'name' VALUE :OLD.name,'article' VALUE :OLD.article);
|
|
v_new := JSON_OBJECT('id' VALUE :NEW.id,'name' VALUE :NEW.name,'article' VALUE :NEW.article);
|
|
ELSE
|
|
v_op := 'DELETE'; v_pk := :OLD.id;
|
|
v_old := JSON_OBJECT('id' VALUE :OLD.id,'name' VALUE :OLD.name,'article' VALUE :OLD.article);
|
|
END IF;
|
|
|
|
INSERT INTO operation_log (table_name, operation_type, record_pk, old_data, new_data)
|
|
VALUES ('PRODUCTS', v_op, TO_CHAR(v_pk), v_old, v_new);
|
|
END;
|
|
/
|
|
|
|
CREATE OR REPLACE TRIGGER trg_log_purchase_orders
|
|
AFTER INSERT OR UPDATE OR DELETE ON purchase_orders
|
|
FOR EACH ROW
|
|
DECLARE
|
|
v_old CLOB; v_new CLOB; v_op VARCHAR2(10); v_pk NUMBER;
|
|
BEGIN
|
|
IF SYS_CONTEXT('USERENV', 'CLIENT_INFO') = 'SKIP_LOGGING' THEN RETURN; END IF;
|
|
|
|
IF INSERTING THEN
|
|
v_op := 'INSERT'; v_pk := :NEW.id;
|
|
v_new := JSON_OBJECT('id' VALUE :NEW.id,'supplier_id' VALUE :NEW.supplier_id,'order_date' VALUE TO_CHAR(:NEW.order_date,'YYYY-MM-DD'));
|
|
ELSIF UPDATING THEN
|
|
v_op := 'UPDATE'; v_pk := :OLD.id;
|
|
v_old := JSON_OBJECT('id' VALUE :OLD.id,'supplier_id' VALUE :OLD.supplier_id,'order_date' VALUE TO_CHAR(:OLD.order_date,'YYYY-MM-DD'));
|
|
v_new := JSON_OBJECT('id' VALUE :NEW.id,'supplier_id' VALUE :NEW.supplier_id,'order_date' VALUE TO_CHAR(:NEW.order_date,'YYYY-MM-DD'));
|
|
ELSE
|
|
v_op := 'DELETE'; v_pk := :OLD.id;
|
|
v_old := JSON_OBJECT('id' VALUE :OLD.id,'supplier_id' VALUE :OLD.supplier_id,'order_date' VALUE TO_CHAR(:OLD.order_date,'YYYY-MM-DD'));
|
|
END IF;
|
|
|
|
INSERT INTO operation_log (table_name, operation_type, record_pk, old_data, new_data)
|
|
VALUES ('PURCHASE_ORDERS', v_op, TO_CHAR(v_pk), v_old, v_new);
|
|
END;
|
|
/
|