19
2011
Oracle Veri Tabanında Sequence ve Trigger(Tetikçi) Kullanımı 2
Önceki yazımızda hazırladığımız hizmetler talosuna kayıt eklerken her kayıt için eklendiği cihaz ip’si ve saatiyle birlikte kayıt işlemi yapan saklı yordam yazalım.
Saklı yordam üzerinde işlem yapılacak hesabın hesap idsi ile değişiklik miktarı parametre olarak alıyor.
Hareket tablosunda hiç kayıt yok ise hesap yeni açılmış ve bakiyesi 0 olarak kabul ediliyor. Kayıt olmadığında select sorgusu “no_data_found” hatası fırlatılıyor bizde onu yakalayıp önceki_bakiye alanını 0 yapıyoruz.
Insert işlemi yaperken Hareket_Seq sequence’inden değeri alıp kaydedebiliyoruz. Önceki yazıda yazdığımız Hizmet_Seq_Trig tetikçisini silelim. Silmezsek İnsert işlemi yapıldığında Hareket_Seq.Nextval hem Hizmet_Seq_Trig hem saklı yordamımızda çalışacağı için id iki iki artar.
CREATE OR REPLACE PROCEDURE HAREKET_LOG (HESAP_NO NUMBER, CEKILEN_MIKTAR NUMBER) AS ESKI_MIKTAR NUMBER; YENI_MIKTAR NUMBER; BEGIN SELECT YENI_BAKIYE INTO ESKI_MIKTAR FROM HAREKET WHERE HAREKET_ID = (SELECT MAX (HAREKET_ID) FROM HAREKET WHERE HESAP_ID = HESAP_NO); YENI_MIKTAR := ESKI_MIKTAR - CEKILEN_MIKTAR; IF YENI_MIKTAR > -100 THEN INSERT INTO HAREKET (HAREKET_ID, HESAP_ID, YENI_BAKIYE, ESKI_BAKIYE, TARIH, IP) VALUES (HAREKET_SEQ.NEXTVAL, --hareket_seq yeni id aliniyor HESAP_NO, YENI_MIKTAR, ESKI_MIKTAR, SYSDATE, SYS_CONTEXT ('USERENV', 'IP_ADDRESS')); END IF; EXCEPTION WHEN NO_DATA_FOUND THEN --Hareket kaydi yok ise hesap hiç kullanilmamistir. INSERT INTO HAREKET (HAREKET_ID, HESAP_ID, YENI_BAKIYE, ESKI_BAKIYE, TARIH, IP) VALUES (HAREKET_SEQ.NEXTVAL, HESAP_NO, cekilen_miktar * (-1), 0, SYSDATE, SYS_CONTEXT ('USERENV', 'IP_ADDRESS')); WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE ('Beklenmeyen Hata ile Karsilasildi.'); END;
Daha sonra EXEC HAREKET_LOG(1,10) ile saklı yoradımı çalıştırdığımızda ( Hesap tablosunda Hesap_id’si 1 olan kayıt olmalı. ) Hesap miktarı 100′un altına düşene kadar bakiyeden çıkartıyor.
Kariyer
- Yazılım Geliştirme Uzmanları
MobilMutfak - Java Yazılım Uzmanı
Yapı Kredi Emeklilik - Java Yazılım Uzmanı
Universal Bilgi Teknolojileri - Yazılım Geliştirmeci ve Proje Mühendisi
Yapı ve Kredi Bankası - Java Yazılım Uzmanı
Abaküs Finansal Yaz. A.Ş









