Oracle PL / SQL'de Otonom İşlem: Commit, Rollback

İçindekiler:

Anonim

PL / SQL'deki TCL İfadeleri nelerdir?

TCL, İşlem Kontrol İfadeleri anlamına gelir. Bekleyen işlemleri kaydeder veya bekleyen işlemi geri alır. Bu ifadeler hayati bir rol oynar çünkü işlem kaydedilmediği sürece DML ifadeleri aracılığıyla yapılan değişiklikler veritabanına kaydedilmez. 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İ DÖN Belirtilen kadar bekleyen tüm işlemleri iptal edin

İşlem aşağıdaki senaryolara göre tamamlanacaktır.

  • Yukarıdaki ifadelerden herhangi biri yayınlandığında (SAVEPOINT hariç)
  • DDL ekstreleri yayınlandığında. (DDL, otomatik kesinleştirme ifadeleridir)
  • DCL beyanları yayınlandığında. (DCL, otomatik kesinleştirme ifadeleridir)

Otonom İşlem Nedir

PL / SQL'de, veriler üzerinde yapılan tüm değişiklikler bir işlem olarak adlandırılacaktır. Kaydetme / atma uygulandığında işlem tamamlanmış olarak kabul edilir. Herhangi bir kaydetme / atma belirtilmezse işlem tamamlanmış sayılmaz ve veriler üzerinde yapılan değişiklikler sunucuda kalıcı hale getirilmez.

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 o oturumdaki tüm bekleyen değişikliklere olan etkilerini kaydetme / atma. Otonom İşlem, geliştiriciye, ayrı bir işlemde değişiklik yapmasına ve ana oturum işlemini etkilemeden söz konusu işlemi kaydetmesine / atmasına izin veren bir işlevsellik sağlar.

  • Bu otonom işlem, alt program düzeyinde belirtilebilir.
  • Herhangi bir alt programın farklı bir işlemde çalışması için, bu bloğun bildirim bölümünde 'PRAGMA OTONOMUS_TRANSASYONU' anahtar kelimesi verilmelidir.
  • Derleyiciye bunu ayrı bir işlem olarak ele alması talimatını verecek ve bu bloğun içinde kaydetme / atma ana işleme yansıtılmayacaktır.
  • Bu otonom işlemden ana işleme gitmeden önce COMMIT veya ROLLBACK yayınlamak zorunludur çünkü herhangi bir zamanda sadece bir işlem aktif olabilir.
  • Dolayısıyla, özerk bir işlem yaptığımızda, onu kaydetmemiz ve işlemi tamamlamamız gerekir, o zaman yalnızca ana işleme geri dönebiliriz.

Sözdizimi:

DECLAREPRAGMA AUTONOMOUS_TRANSACTION;.BEGIN[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.

DECLAREl_salary NUMBER;PROCEDURE nested_block ISPRAGMA autonomous_transaction;BEGINUPDATE empSET salary = salary + 15000WHERE emp_no = 1002;COMMIT;END;BEGINSELECT 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 empSET salary = salary + 5000WHERE 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 15000Before:Salary of 1002 is 10000After:Salary of 1001 is 15000After:Salary of 1002 is 25000

Kod Açıklaması:

  • Kod satırı 2 : l_salary'ı NUMBER olarak bildirme.
  • Kod satırı 3 : nested_block prosedürünü bildirme
  • Kod satırı 4 : nested_block prosedürünü 'AUTONOMOUS_TRANSACTION' olarak yapmak.
  • Kod satırı 7-9: 1002 numaralı çalışanın maaşını 15000 artırma.
  • Kod satırı 10: İşlemin gerçekleştirilmesi.
  • Kod satırı 13-16: Çalışanın 1001 ve 1002 maaş ayrıntılarını değişikliklerden önce yazdırmak.
  • 17-19 numaralı kod satırı: 1001 numaralı çalışanın maaşını 5000 artırıyor.
  • Kod satırı 20: nested_block prosedürünün çağrılması;
  • Kod satırı 21: Ana işlem iptal ediliyor.
  • Kod satırı 22-25: Değişikliklerden sonra çalışan 1001 ve 1002'nin maaş ayrıntılarının yazdırılması.
  • 1001 numaralı çalışan için maaş artışı, ana işlem iptal edildiği için yansıtılmaz. 1002 numaralı çalışan için maaş artışı, bu blok ayrı bir işlem olarak yapıldığı ve sonunda kaydedildiği için yansıtılır.
  • Bu nedenle, ana işlemdeki kaydetme / atma işleminden bağımsız olarak, özerk işlemdeki değişiklikler, ana işlem değişikliklerini etkilemeden kaydedildi.