Trigger (Tetikleyiciler)

Oracle veri tabanında tabloları altında kullanılan ve çok işe yarayan trigger (tetikleyicilerden) bahsedelim.

Bir tabloya  kayıt ekledik ve bu kaydı ekledikten sonra bir trigger tanımlayarak başka bir işlem yapmasını sağlayacağız.

 

CREATE OR REPLACE TRIGGER trigger_log_sample
-- Kayıt silindikten veya değiştirildikten sonra çalış
AFTER DELETE OR UPDATE
ON plan_kontrol_detay -- çalışacağı tablo adı
FOR EACH ROW -- her satır için çalış
DECLARE
v_session_id VARCHAR2 (200);
v_mac VARCHAR2 (200);
v_ip_address VARCHAR2 (200);
user_kodu VARCHAR2 (10);
v_islem VARCHAR2 (10);
BEGIN
BEGIN
-- Oturumun idsini al
SELECT USERENV ('SESSIONID') INTO v_session_id FROM DUAL;
-- Oturum açan makinenin mac adresini al
SELECT SUBSTR (machine, 1, 100)
INTO v_mac
FROM v$session
WHERE audsid = v_session_id;
EXCEPTION
WHEN OTHERS
THEN
NULL;
END;
-- Oturum açan bilgisayarın ip adresini al
BEGIN
SELECT SYS_CONTEXT ('userenv', 'ip_address')
INTO v_ip_address
FROM DUAL;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
v_ip_address := '';
WHEN OTHERS
THEN
v_ip_address := '';
END;
-- guncelleştirme yapılınca v_islemi = upd
IF UPDATING
THEN
v_islem := 'UPD';
-- guncelleştirme yapılınca v_islemi = del
ELSIF DELETING
THEN
v_islem := 'DEL';
END IF;
-- eski açıklama ile yeni açıklama eşit ise
IF : old.ACIKLAMA = :NEW.ACIKLAMA
THEN
user_kodu := : old.user_kodu;
ELSE
user_kodu := :new.user_kodu;
END IF;
-- log tablosuna kayıt yap
INSERT INTO plan_kontrol_detay_log kdl (kdl.plan_id,
kdl.plan_detay_id,
kdl.user_date,
kdl.user_kodu,
kdl.aciklama,
kdl.ip_address,
kdl.mac,
kdl.w_type)
VALUES (: old.plan_id,
: old.plan_detay_id,
SYSDATE,
user_kodu,
: old.aciklama,
v_ip_address,
v_mac,
v_islem);

end;

Yorum ekle

Loading