RAISE RECORD/CURSOR TRIGGER

Slides:



Advertisements
Benzer bir sunumlar
Stored Procedure Öğr.Gör.Metin Akbulut.
Advertisements

T sql-diğer komutlar Metin Akbulut.
SQL Structured Query Language
VERİ TABANI YÖNETİMİ Ders 11: PL/SQL’e Giriş
SQL de Değişken Tanımlama
SQL Komutlar 5 Sibel SOMYÜREK.
Veri Tabanı Yönetim Sistemleri
T-SQL-2.Konu Akış Kontrolleri.
VeriTabanı Uygulama. Tabloları yaratmak için MySQL komutları.
Tetikleyici. Nedir? Bir tablo üzerinde Ekleme silme ve güncellemeye bağlı olarak tetiklenip çalışan SQL kodlarıdır. Genel amacı veri bütünlüğünü korumaktır.
SQL (STRUCTURED QUERY LANGUAGE)
ÖRNEKLER. musteri Id adi soyadi mus_satis Id barkod adet Urunlar barkod urun_adi kodu fiyati Stok_hareket tarih barkod gelen giden.
SQL Dili ve MySQL Komutları
SQL de Değişken Tanımlama
Iletisim Icin : Blog : E - Mail :
VeriTabanı Uygulama.
SQL Komutları (2) Uzm. Murat YAZICI.
FONKSİYONLAR İbrahim Onur Sığırcı.
Bilgisayar Mühendisliği Bölümü
Veri Tabanı Dersi 4. Laboratuvarı
Veritabanlarına ve SQL'e Giriş Devrim GÜNDÜZ Kivi Bilişim Teknolojileri -
Veri Tabanı Yönetim Sistemleri 2 Ders 5 PL/SQL'e Giriş
SQL’ e Giriş Uzm. Murat YAZICI.
Bilgisayar Mühendisliği Bölümü
Bölüm 4: İleri SQL.
SİSTEM VERİTABANLARI. Sistem veritabanlarını tanıma. Kendi Login’imizi oluşturma Neler İşleyeceğiz?
ADRESİNDEN ÖRNEK VERİ TABANLARINI İNDİRİNİZ
K ıSıT -V ıEW -S EQUENCE U NıON -I NTERSECTıON -E XCEPT E XıSTS -I N İbrahim Onur Sığırcı.
Yeni Veritabanı Oluşturma
C OMPANY DB / Ö RNEKLER İbrahim Onur Sığırcı. İ LIŞKI T ABLOLARı idfnamelnamebdate AhmetDemir MehmetBakır AyşeTunç1994.
Veri Tabanı Yönetimi Dersi 7. Laboratuvarı Arş. Gör. Pınar CİHAN.
Veri Tabanı Yönetimi Dersi 8. Laboratuvarı Arş. Gör. Pınar CİHAN.
S ORGU / DML / DDL KOMUTLARı İbrahim Onur Sığırcı.
Veri Tabanı Yönetimi Dersi 2. Laboratuvarı Arş. Gör. Pınar CİHAN.
5. Temel SQL (Basic SQL) 5.1. SQL Veri Tanımlama ve Veri Tipleri (SQL Data Definition and Data Types) SQL de Şema ve Katalog Kavramı (Schema and.
Veri Tabanı Yönetimi Dersi 4. Laboratuvarı Arş. Gör. Pınar CİHAN.
Veri Tabanı Yönetim Sistemleri 2 Ders 6 PL/SQL Ek Bilgiler Yrd. Doç. Dr. Altan MESUT Trakya Üniversitesi Bilgisayar Mühendisliği Bölümü.
Veri Tabanı Yönetim Sistemleri 2 Ders 5 PL/SQL'e Giriş, Prosedür ve Fonksiyonlar Yrd. Doç. Dr. Altan MESUT Trakya Üniversitesi Bilgisayar Mühendisliği.
Veri Tabanı Yönetim Sistemleri 2 Ders 7 Paket ve Tetikleyiciler Yrd. Doç. Dr. Altan MESUT Trakya Üniversitesi Bilgisayar Mühendisliği Bölümü.
Veri Tabanı Yönetimi Dersi 1. Laboratuvarı Arş. Gör. Pınar CİHAN.
Veri Tabanı Yönetimi Dersi 4. Laboratuvarı Constraint-View-Sequence Union-Intersection-Except Exısts-In Arş. Gör. Pınar CİHAN.
BÖLÜM 9 VERİ TABANI NESNELERİ.
Veri Tabanı Yönetimi Dersi 5
Bilgisayar Mühendisliği Bölümü
Veri Tabanı Yönetimi Dersi 1. Laboratuvarı
Bilgisayar Mühendisliği Bölümü
Veri Tabanı Yönetimi Dersi 7. Laboratuvarı
© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
Veri Tabanı Yönetimi Dersi 8. Laboratuvarı
© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
TETİKLEYİCİLER ve HATA KONTROLÜ
14.DERS Örnekler, Sorular BUKET DOĞAN.
VERİ TABANI SQL (STRUCTURED QUERY LANGUAGE) SAVAŞ TUNÇER.
© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
Company DB / Örnekler İbrahim Onur Sığırcı.
Öğretim Görevlisi Alper Talha Karadeniz Veri Tabanı 1
© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
FONKSİYONLAR İbrahim Onur Sığırcı.
GROUP BY HAVING ORDER BY LIMIT
Sorgu / dml / ddl komutları
RAISE RECORD/CURSOR TRIGGER
SQL (STRUCTURED QUERY LANGUAGE)
Stored Procedure Öğr.Gör.Metin Akbulut.
SQL Server - Triggers.
SQL Server - Stored Procedures
VERİTABANI YÖNETİM SİSTEMLERİ 6-SQL Server-3-DDL
Sunum transkripti:

RAISE RECORD/CURSOR TRIGGER İbrahim Onur Sığırcı

Geçen haftadan CREATE FUNCTION ornek1 (num1 NUMERIC, num2 NUMERIC) RETURNS numeric AS ' DECLARE toplam NUMERIC; BEGIN toplam :=num1+num2; return toplam; END; ' LANGUAGE 'plpgsql';

Geçen haftadan CREATE FUNCTION ornek1 (num1 NUMERIC, num2 NUMERIC) RETURNS numeric AS $$ DECLARE toplam NUMERIC; BEGIN toplam :=num1+num2; return toplam; END; $$ LANGUAGE 'plpgsql';

Geçen haftadan ' ' ' $$ $kelime$ REPLACE Komutu: Mevcut fonksiyonu silmek için kullanılır. Değişikliklerin rahat kullanılması için CREATE OR REPLACE FUNCTION … yazılır.

Raise Bilgilendirme ve hata mesajı yazdırmak için kullanılır. RAISE mesaj_türü MESAJ; Örnek: RAISE NOTICE 'Bilgilendirme'; RAISE EXCEPTION 'Hata Mesajı'; Mesaj Türleri: DEBUG, LOG, INFO, NOTICE, WARNING, EXCEPTION

Örnek – 1 CREATE FUNCTION ornek1 (num1 NUMERIC, num2 NUMERIC) RETURNS numeric AS $$ DECLARE toplam NUMERIC; BEGIN toplam :=num1+num2; RAISE NOTICE 'sayi1:% , sayi2:%', num1, num2; return toplam; END; $$ LANGUAGE 'plpgsql';

Tür tanimlama CREATE TYPE tür_ismi AS (isim1 tür1, isim2 tür2, …); Örnek: CREATE TYPE urunler AS (miktar1 INTEGER, miktar2 INTEGER); Bu türde değişken tanımlaması şu şekildedir: sayi INTEGER; depo URUNLER;

Yardimci örnek ‘123456789’ ssn’i olan çalışanın ismini, çalıştığı departmanın ismini ve maaşını bulunuz. SELECT fname, dname, salary FROM employee e, department d WHERE e.dno = d.dnumber AND e.ssn = ‘123456789’;

Örnek – 2 SSN'i parametre olarak verilen çalışanın ismini, çalıştığı departmanın ismini ve maaşını ekrana yazdıran PL/pgSQL bloğunu yazın. Bir ssn vererek fonksiyonu çağırınız. CREATE TYPE yeni_tur AS (isim VARCHAR(20), dep_isim VARCHAR(20), maas INTEGER); CREATE FUNCTION ornek2 (eno employee.ssn%type) RETURNS yeni_tur AS $$ DECLARE bilgi YENI_TUR; BEGIN SELECT fname, dname, salary INTO bilgi FROM employee e, department d WHERE e.dno = d.dnumber AND e.ssn = eno; RAISE NOTICE 'Calisan ismi: %, departmanin ismi: %, maasi: % TLdir. ', bilgi.isim, bilgi.dep_isim, bilgi.maas ; return bilgi; END; $$ LANGUAGE 'plpgsql';

SELECT ornek2('123456789'); DROP FUNCTION ornek2 (employee.ssn%type);

Cursor Sonuçlar tablo olarak saklanır. cursor_ismi CURSOR FOR sql_query; Örnek: curs CURSOR FOR SELECT * FROM emp;

Örnek – 3 Numarası verilen bir departmandaki çalışanların isimlerini bulan bir fonksiyon yazınız. Bir departman numarası vererek fonksiyonu çağırınız. CREATE FUNCTION ornek3 (dnum NUMERIC) RETURNS void AS $$ DECLARE yeni_cur CURSOR FOR SELECT fname, lname FROM employee WHERE dno = dnum; BEGIN FOR satir IN yeni_cur LOOP RAISE INFO 'Employee name is % %', satir .fname, satir .lname; END LOOP; END; $$ LANGUAGE 'plpgsql';

SELECT ornek3(6); DROP FUNCTION ornek3(numeric);

Örnek – 4 Departman numarası verilen bir departmandaki çalışanların toplam maaşını (SUM() fonksiyonundan yararlanmadan) bulan bir fonksiyon yazınız. CREATE FUNCTION ornek4 (dnum NUMERIC) RETURNS NUMERIC AS $$ DECLARE toplam_maas NUMERIC; curs CURSOR FOR SELECT salary FROM employee WHERE dno = dnum; BEGIN toplam_maas := 0; FOR satir IN curs LOOP toplam_maas := toplam_maas + satir.salary; END LOOP; RETURN toplam_maas; END; $$ LANGUAGE 'plpgsql';

SELECT ornek4(6); DROP FUNCTION ornek4(numeric);

TriggerS (tetikleyiciler) Tablolar üzerinde değişiklik yapılmak istendiğinde çalışırlar. INSERT, UPDATE, DELETE CREATE TRIGGER trigger_isim { BEFORE | AFTER } { events } ON tablo_adı FOR EACH ROW EXECUTE PROCEDURE trigger_fonk_adi(arguments);

CREATE FUNCTION trig_fonk() RETURNS TRIGGER AS ' BEGIN ………… RETURN [null | old| new]; END; ' LANGUAGE 'plpgsql';

Örnek – 5 Sadece tatil günleri dışında ve mesai saatleri içinde employee tablosuna insert yapılmasına izin veren trigger’ı yazınız. CREATE TRIGGER ornek5 BEFORE INSERT ON employee FOR EACH ROW EXECUTE PROCEDURE trig_fonk_ornek5();

CREATE FUNCTION trig_fonk_ornek5() RETURNS TRIGGER AS $$ BEGIN IF ( to_char(now(), 'DY') in ('SAT', 'SUN') OR to_char(now(), 'HH24') not between '08' and '18') THEN RAISE EXCEPTION 'Sadece mesai gunlerinde ve mesai saatlerinde insert yapabilirsiniz.'; RETURN null; ELSE RETURN new; END IF; END; $$ LANGUAGE 'plpgsql';

Örnek – 6 Departman tablosunda dnumber kolonu değişince employee tablosunda da dno’nun aynı şekilde değişmesini sağlayan trigger’ı yazınız. CREATE TRIGGER ornek6 AFTER UPDATE ON department FOR EACH ROW EXECUTE PROCEDURE trig_fonk_ornek6();

CREATE FUNCTION trig_fonk_ornek6() RETURNS TRIGGER AS $$ BEGIN UPDATE employee SET dno = new.dnumber WHERE dno = old.dnumber; RETURN new; END; $$ LANGUAGE 'plpgsql';

Örnek – 7 Maaş inişine ve %10’dan fazla maaş artışına izin vermeyen trigger’ı yazınız. CREATE TRIGGER ornek7 BEFORE UPDATE ON employee FOR EACH ROW EXECUTE PROCEDURE trig_fonk_ornek7();

CREATE FUNCTION trig_fonk_ornek7() RETURNS TRIGGER AS $$ BEGIN IF( old.salary > new.salary OR new.salary>1.1*old.salary) THEN RAISE EXCEPTION 'Maasi dusuremezsiniz ve %%10dan fazla zam yapamazsınız.'; RETURN old; ELSE RETURN new; END IF; END; $$ LANGUAGE 'plpgsql';

Örnek – 8 Departman tablonuza salary ile aynı tipte total_salary kolonu ekleyin. Employee tablosunda bir işçinin maaşında maaş değişikliği olduğunda departman tablonuzdaki total_salary kolonunda da gerekli güncellemeyi yapacak trigger’ı yazınız. ALTER TABLE department ADD COLUMN total_salary INTEGER default 0; CREATE TRIGGER ornek8 AFTER INSERT or UPDATE or DELETE ON employee FOR EACH ROW EXECUTE PROCEDURE trig_fonk_ornek8();

CREATE FUNCTION trig_fonk_ornek8() RETURNS TRIGGER AS $$ BEGIN IF (TG_OP = 'DELETE') THEN update department set total_salary=total_salary-old.salary where dnumber=old.dno; ELSIF (TG_OP = 'UPDATE') THEN set total_salary=total_salary-old.salary+new.salary ELSE set total_salary=total_salary+new.salary where dnumber=new.dno; END IF; RETURN new; END; $$ LANGUAGE 'plpgsql';

DROP TRIGGER ornek8 ON employee ; DROP FUNCTION trig_fonk_ornek8();