Otonom İşlem Oracle PL/SQL: Kaydetme, Geri Alma
PL/SQL'deki TCL İfadeleri nelerdir?
TCL, İşlem Kontrol Bildirimleri anlamına gelir. Bekleyen işlemleri kaydedecek veya bekleyen işlemi geri alacaktır. Bu ifadeler hayati bir rol oynamaktadır çünkü işlem kaydedilmediği sürece DML ifadeleri aracılığıyla yapılan değişiklikler veritabanına kaydedilmeyecektir. Aşağıda farklı TCL beyanları bulunmaktadır.
KOMİTE | Bekleyen tüm işlemleri kaydeder |
GERİ DÖNÜŞ | Bekleyen tüm işlemleri iptal edin |
KAYDETME NOKTASI | İşlemde geri alma işleminin daha sonra yapılabileceği bir nokta oluşturur |
GERİ GERİ DÖN | Belirtilen tarihe kadar tüm bekleyen işlemleri iptal edin |
İşlem aşağıdaki senaryolar gerçekleştiğinde tamamlanacaktır.
- Yukarıdaki beyanlardan herhangi biri yayınlandığında (SAVEPOINT hariç)
- DDL bildirimleri yayınlandığında. (DDL otomatik taahhüt ifadeleridir)
- NE ZAMAN DCL bildirimleri yayınlanır. (DCL otomatik taahhüt ifadeleridir)
Otonom İşlem Nedir?
PL/SQL'de veriler üzerinde yapılan tüm değişiklikler işlem olarak adlandırılacaktır. Kaydetme/atma işlemi uygulandığında işlem tamamlanmış sayılır. Kaydet/at seçeneği verilmediği takdirde işlem tamamlanmış sayılmayacak ve veriler üzerinde yapılan değişiklikler sunucuda kalıcı hale getirilmeyecektir.
Bir oturum sırasında yapılan bazı değişikliklerden bağımsız olarak, PL / SQL tüm değişikliği tek bir işlem olarak ele alacak ve bu işlemin kaydedilmesi/atılması, o oturumda bekleyen tüm değişiklikleri etkileyecektir. Otonom İşlem, geliştiriciye, ayrı bir işlemde değişiklik yapılmasına ve ana oturum işlemini etkilemeden söz konusu işlemin kaydedilmesine/atılmasına olanak tanıyan bir işlevsellik sağlar.
- Bu özerk işlem alt program düzeyinde belirtilebilir.
- Herhangi bir alt programın farklı bir işlemde çalışmasını sağlamak için o bloğun bildirim bölümünde 'PRAGMA AUTONOMOUS_TRANSATION' anahtar sözcüğünün verilmesi gerekir.
- Derleyiciye bunu ayrı bir işlem olarak ele alması talimatını verecek ve bu blok içinde kaydetme/atma işlemi ana işleme yansımayacaktır.
- Bu otonom işlemden ana işleme geçmeden önce COMMIT veya ROLLBACK verilmesi zorunludur çünkü herhangi bir zamanda yalnızca bir işlem aktif olabilir.
- Yani otonom bir işlem yaptığımızda onu kaydetmemiz ve işlemi tamamlamamız gerekiyor, o zaman ancak ana işleme geri dönebiliriz.
Sözdizimi:
DECLARE PRAGMA AUTONOMOUS_TRANSACTION; . BEGIN <executin_part> [COMMIT|ROLLBACK] END; /
- Yukarıdaki sözdiziminde blok otonom bir işlem olarak yapılmıştır.
Örnek 1: Bu örnekte otonom işlemin nasıl çalıştığını anlayacağız.
DECLARE l_salary NUMBER; PROCEDURE nested_block IS PRAGMA autonomous_transaction; BEGIN UPDATE emp SET salary = salary + 15000 WHERE emp_no = 1002; COMMIT; END; BEGIN SELECT salary INTO l_salary FROM emp WHERE emp_no = 1001; dbms_output.put_line('Before Salary of 1001 is'|| l_salary); SELECT salary INTO l_salary FROM emp WHERE emp_no = 1002; dbms_output.put_line('Before Salary of 1002 is'|| l_salary); UPDATE emp SET salary = salary + 5000 WHERE emp_no = 1001; nested_block; ROLLBACK; SELECT salary INTO l_salary FROM emp WHERE emp_no = 1001; dbms_output.put_line('After Salary of 1001 is'|| l_salary); SELECT salary INTO l_salary FROM emp WHERE emp_no = 1002; dbms_output.put_line('After Salary of 1002 is '|| l_salary); end;
Çıktı
Before:Salary of 1001 is 15000 Before:Salary of 1002 is 10000 After:Salary of 1001 is 15000 After:Salary of 1002 is 25000
Kod Açıklaması:
- Kod satırı 2: l_salary NUMBER olarak bildiriliyor.
- Kod satırı 3: Nested_block prosedürünün bildirilmesi
- Kod satırı 4: Nested_block işleminin 'AUTONOMOUS_TRANSACTION' olarak yapılması.
- Kod satırı 7-9: 1002 numaralı çalışanın maaşını 15000 kişi artırmak.
- Kod satırı 10: İşlem gerçekleştiriliyor.
- Kod satırı 13-16: 1001 ve 1002 nolu çalışanların maaş bilgilerinin değişiklik yapılmadan önce yazdırılması.
- Kod satırı 17-19: 1001 numaralı çalışanın maaşını 5000 kişi artırmak.
- Kod satırı 20: Nested_block prosedürünün çağrılması;
- Kod satırı 21: Ana işlemin iptal edilmesi.
- Kod satırı 22-25: Değişiklik sonrası 1001 ve 1002 nolu çalışanların maaş bilgilerinin yazdırılması.
- 1001 numaralı çalışanın maaş artışı ana işlem iptal edildiği için yansıtılmamıştır. 1002 numaralı çalışanın maaş artışı, o bloğun ayrı bir işlem olarak yapılarak sonda kaydedilmesi nedeniyle yansıtılmıştır.
- Böylece, ana işlemdeki kaydetme/atma işlemine bakılmaksızın, otonom işlemdeki değişiklikler, ana işlem değişikliklerini etkilemeden kaydedilmiştir.