Ίσως επειδή το έψαξα λιγάκι παραπάνω βρήκα κάποιες πληροφορίες που ίσως σε κάποιους τους φανούν ενδιαφέρουσες:
Η Oracle δεν υποστηρίζει nested transactions σε αντίθεση με τον SQL Server. Κάνει commit ή rollback όλα τα προηγούμενα statements και ανοίγει νέο transaction με την εκτέλεση του επόμενου statement.
Όταν ένα statement προκαλέσει error τότε γίνεται rollback μόνο αυτό και όχι ότι έχει πριν από αυτό προηγηθεί.
Στο exception block πρέπει explicitly να εκτελέσουμε commit ή rollback δίοτι μετα εξαρτάται από το περιβάλλον της Oracle database το τι θα αποφασίσει να γίνει. Βασικά εαν ο χρήστης επιλέξει έπειτα session disconnect τότε γίνεται commit, εαν κλείσει το session rollback κλπ.
Εαν θέλουμε να εκτελέσουμε κάποια statements ενδιάμεσα σε ένα transaction που να μην σχετίζονται με αυτό και να μην το επηρεάζουν τότε θα πρέπει να χρησιμοποιήσουμε μια άλλη procedure που να είναι δηλωμένη ως PRAGMA AUTONOMOUS_TRANSACTION. Έτσι θα μπορεί να εκτελεστεί αυτή και να κάνει commit χωρίς να επηρεάζει το block μέσα από το οποίο αυτή καλείται.
Dimitris Boundris
Software Engineer