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

Otonom İşlem

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.