- insert
- update
- delete
2-Şemlarda
- create table
- alter table
- drop table autid
- rename
- truncate
- revoke
3- veri tabanı
- login
- logoff
- shutdown
- startup
TRIGGER KULLANMAK İÇİN YETKİLER
Triggerları kullanmak içi yetkilerinz olması gerekir bunlar nelerdir
- tablo üzerinde işlem yapacaksanız ya tablonun sahibi yada tabloda ALTER yetkisi olması gerekir.
- tablo bağlantılı ise ALTER ANY TABLE yetkisi olması gerekir. (trigger tabloda değişiklik yapacak onun için gerekli)
- CREATE TRIGGER yetkisine sahip olmalı , başkasının şemalarını kullanacak isenizde CREATE ANY TRIGGER yetkisi gerekir. (yaratmak için de sistem yetkisne ihtiyacınız var herkezde olması sacma olmaması kacınılmaz bi durum . :)))
ayrıca önemli bir not belirtek gerekiyor.trigger lar için yetkileri rollerden veremezsiniz. yetkilendirme işlemini tetikleyici oluşturan tarafından yapılmalıdır.
TRIGGER TİPLERİ
Satır düzeyinde
INSTEAD OF triggerları
şema triggerları
BEFORE ve AFTER triggerları
yordam düzeyinde
diye gruplamak mümkündür.
ÖRNEKLER --önce tabloyu oluşturalım CREATE
(
ID
VARCHAR2(4 BYTE) NOT NULL,FIRST_NAME
VARCHAR2(10 BYTE),LAST_NAME
VARCHAR2(10 BYTE),START_DATE
DATE,END_DATE
DATE,SALARY
NUMBER(8,2),CITY
VARCHAR2(10 BYTE),DESCRIPTION
VARCHAR2(15 BYTE))
-- tabloyu görelim select
-- triger yarayalim CREATE declare v_error v_error
end;
/
-- bir veri ekleyelim insert
--bunu ekleyince trigger calişacak ve uyarı verecek maaş cok fazla diye
insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) values('08','James', 'Cat', to_date('19960917','YYYYMMDD'), to_date('20020415','YYYYMMDD'), 1000.78,'Vancouver', 'Tester');
-- maaş değerini düşürürsek eklemeyi düzgun yapacaktir.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
tabloya daha fazla ekleyelim insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) values ('01','Jason', 'Martin', to_date('19960725','YYYYMMDD'), to_date('20060725','YYYYMMDD'), 1234.56, 'Toronto', 'Programmer'); insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) values('02','Alison', 'Mathews', to_date('19760321','YYYYMMDD'), to_date('19860221','YYYYMMDD'), 6661.78, 'Vancouver','Tester'); insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) values('03','James', 'Smith', to_date('19781212','YYYYMMDD'), to_date('19900315','YYYYMMDD'), 6544.78, 'Vancouver','Tester'); insert insert insert insert
bu veriler üzerinde trigger denemelaeri yapacağiz.
tablodan veriler silmek istiyoruz ama hangilerini sildiğimi görmek de istiyoruz silme işlemi tamamlandıktan sonra. bu işlem için aşağidaki triggerı kullanabilriz.
SET SERVEROUTPUT ON aktif hale getiriniz.
CREATE OR REPLACE TRIGGER SilGoster -- trigger a SilGoster diyelim
v_Silinen
employee%ROWTYPE; BEGIN-- teker teker silinenleri v_Silinen içine aliyoruz
v_Silinen
.first_name := :old.first_name;v_Silinen
.last_name := :old.last_name;
DBMS_OUTPUT
.put_line(v_Silinen.first_name);DBMS_OUTPUT
.put_line(v_Silinen.last_name); END SilGoster; ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
triggerların UPDATE INSERT VE DELETE işlemlerinde nasıl çaliştiğini gösteren genel bir örnek. yuakrıdaki tablo yapısını kullanınız.
create or replace trigger deg_goster
before update or delete or insert on employee
for each row
declare
v_ChangeType CHAR(1);
BEGIN
IF INSERTING THEN
v_ChangeType := 'I';
ELSIF UPDATING THEN
v_ChangeType :='U';
ELSE
v_ChangeType :='D';
END IF;
DBMS_OUTPUT.put_line(v_ChangeType || ''|| user||''||sysdate);
END deg_goster;
/
No comments:
Post a Comment