Αυτόνομη συναλλαγή στο Oracle PL / SQL: Commit, Rollback

Πίνακας περιεχομένων:

Anonim

Τι είναι οι δηλώσεις TCL στο PL / SQL;

Το TCL σημαίνει Δηλώσεις Ελέγχου Συναλλαγών. Θα σώσει είτε τις εκκρεμείς συναλλαγές είτε θα επαναφέρει την εκκρεμή συναλλαγή. Αυτές οι δηλώσεις διαδραματίζουν ζωτικό ρόλο επειδή εκτός εάν αποθηκευτεί η συναλλαγή, οι αλλαγές μέσω των δηλώσεων DML δεν θα αποθηκευτούν στη βάση δεδομένων. Ακολουθούν οι διαφορετικές δηλώσεις TCL.

ΔΙΑΠΡΑΤΤΩ Αποθηκεύει όλες τις εκκρεμείς συναλλαγές
ΠΑΡΑΚΟΛΟΥΘΗΣΗ Απορρίψτε όλες τις εκκρεμείς συναλλαγές
ΑΠΟΘΗΚΕΥΣΗ Δημιουργεί ένα σημείο στη συναλλαγή έως ότου η επαναφορά μπορεί να γίνει αργότερα
ΠΑΡΑΚΟΛΟΥΘΗΣΗ ΣΤΟ Απορρίψτε όλες τις εκκρεμείς συναλλαγές μέχρι το καθορισμένο <σημείο αποθήκευσης>

Η συναλλαγή θα ολοκληρωθεί στα ακόλουθα σενάρια.

  • Όταν εκδοθεί οποιαδήποτε από τις παραπάνω δηλώσεις (εκτός από SAVEPOINT)
  • Όταν εκδίδονται δηλώσεις DDL. (Το DDL είναι δηλώσεις αυτόματης δέσμευσης)
  • ΠΟΤΕ εκδίδονται δηλώσεις DCL. (Το DCL είναι δηλώσεις αυτόματης δέσμευσης)

Τι είναι η αυτόνομη συναλλαγή

Στο PL / SQL, όλες οι τροποποιήσεις που γίνονται στα δεδομένα θα ονομάζονται συναλλαγές. Μια συναλλαγή θεωρείται πλήρης όταν εφαρμόζεται η αποθήκευση / απόρριψη. Εάν δεν δοθεί αποθήκευση / απόρριψη, τότε η συναλλαγή δεν θα θεωρείται ολοκληρωμένη και οι τροποποιήσεις που γίνονται στα δεδομένα δεν θα γίνουν μόνιμες στον διακομιστή.

Ανεξάρτητα από ορισμένες τροποποιήσεις που έγιναν κατά τη διάρκεια μιας περιόδου λειτουργίας, το PL / SQL θα αντιμετωπίζει ολόκληρη την τροποποίηση ως μία μόνο συναλλαγή και η αποθήκευση / απόρριψη αυτής της συναλλαγής επηρεάζει όλες τις εκκρεμείς αλλαγές σε αυτήν την περίοδο λειτουργίας. Η Αυτόνομη Συναλλαγή παρέχει μια λειτουργικότητα στον προγραμματιστή στην οποία επιτρέπει να κάνει αλλαγές σε μια ξεχωριστή συναλλαγή και να αποθηκεύσει / απορρίψει τη συγκεκριμένη συναλλαγή χωρίς να επηρεάσει τη συναλλαγή της κύριας περιόδου λειτουργίας.

  • Αυτή η αυτόνομη συναλλαγή μπορεί να καθοριστεί σε επίπεδο υποπρογράμματος.
  • Για να λειτουργήσει οποιοδήποτε υποπρόγραμμα σε διαφορετική συναλλαγή, η λέξη-κλειδί «PRAGMA AUTONOMOUS_TRANSATION» θα πρέπει να αναφέρεται στη δηλωτική ενότητα αυτού του μπλοκ.
  • Θα δώσει εντολή στον μεταγλωττιστή να το χειριστεί αυτό ως ξεχωριστή συναλλαγή και η αποθήκευση / απόρριψη μέσα σε αυτό το μπλοκ δεν θα αντικατοπτρίζεται στην κύρια συναλλαγή.
  • Η έκδοση COMMIT ή ROLLBACK είναι υποχρεωτική πριν βγείτε από αυτήν την αυτόνομη συναλλαγή στην κύρια συναλλαγή, διότι ανά πάσα στιγμή μόνο μία συναλλαγή μπορεί να είναι ενεργή.
  • Έτσι, όταν κάναμε μια αυτόνομη συναλλαγή, πρέπει να την αποθηκεύσουμε και να ολοκληρώσουμε τη συναλλαγή, μόνο τότε μπορούμε να επιστρέψουμε στην κύρια συναλλαγή.

Σύνταξη:

DECLAREPRAGMA AUTONOMOUS_TRANSACTION;.BEGIN[COMMIT|ROLLBACK]END;/
  • Στην παραπάνω σύνταξη, το μπλοκ έχει γίνει ως αυτόνομη συναλλαγή.

Παράδειγμα 1 : Σε αυτό το παράδειγμα, θα κατανοήσουμε πώς λειτουργεί η αυτόνομη συναλλαγή.

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;

Παραγωγή

Before:Salary of 1001 is 15000Before:Salary of 1002 is 10000After:Salary of 1001 is 15000After:Salary of 1002 is 25000

Επεξήγηση κώδικα:

  • Γραμμή κώδικα 2 : Δήλωση l_salary ως ΑΡΙΘΜΟΣ.
  • Γραμμή κώδικα 3 : Διακήρυξη διαδικασίας nested_block
  • Γραμμή κώδικα 4 : Κάνοντας τη διαδικασία nested_block ως "AUTONOMOUS_TRANSACTION".
  • Κωδικός 7-9: Αύξηση του μισθού για τον αριθμό υπαλλήλου 1002 κατά 15000.
  • Γραμμή κωδικού 10: Πραγματοποίηση της συναλλαγής.
  • Κωδικός 13-16: Εκτύπωση των στοιχείων μισθού των εργαζομένων 1001 και 1002 πριν από τις αλλαγές.
  • Κωδικός 17-19: Αύξηση του μισθού για τον αριθμό υπαλλήλου 1001 κατά 5000.
  • Γραμμή κωδικού 20: Κλήση της διαδικασίας nested_block.
  • Γραμμή κωδικού 21: Απόρριψη της κύριας συναλλαγής.
  • Κωδικός 22-25: Εκτύπωση των στοιχείων μισθού των εργαζομένων 1001 και 1002 μετά από αλλαγές.
  • Η αύξηση μισθού για τον αριθμό εργαζομένου 1001 δεν αντικατοπτρίζεται επειδή η κύρια συναλλαγή έχει απορριφθεί. Η αύξηση μισθού για τον αριθμό υπαλλήλου 1002 αντικατοπτρίζεται επειδή το μπλοκ έχει γίνει ως ξεχωριστή συναλλαγή και αποθηκεύεται στο τέλος.
  • Έτσι, ανεξάρτητα από την αποθήκευση / απόρριψη στην κύρια συναλλαγή, οι αλλαγές στην αυτόνομη συναλλαγή έχουν αποθηκευτεί χωρίς να επηρεάζονται οι κύριες αλλαγές συναλλαγής.