Какъв е ефектът от поставянето на този комит в програмата?
Документацията на Oracle описва COMMIT като:
Цел
Използвайте
COMMITизявление, за да прекратите текущата си транзакция и да направите постоянни всички промени, извършени в транзакцията. Транзакцията е последователност от SQL изрази, които Oracle Database третира като единична единица. Това изявление също изтрива всички точки за запис в транзакцията и освобождава заключванията на транзакциите.
Ако имате три PROCEDURE и всеки съдържа COMMIT тогава не можете да стартирате и трите след това, ако възникне изключение в последния, ROLLBACK всички, тъй като промените от първите две вече ще бъдат COMMIT Тед.
Като общо правило, не трябва да не използвайте COMMIT в PROCEDURE или FUNCTION но трябва да остави на обаждащия да COMMIT транзакцията, за да могат да обединят множество действия заедно.
Разбира се, има случаи на използване, при които ще искате да нарушите това правило, но трябва да разгледате всеки случай поотделно и да отделите време, за да разберете напълно вашата бизнес логика, преди да нарушите това правило, за да знаете какво е COMMIT във всеки случай.
Трябва ли да направя тази транзакция като
AUTONOMOUS_TRANSACTION?
Един от случаите на използване е регистриране - може да имате PROCEDURE който извиква друга PROCEDURE за да регистрирате действията на потребителя и независимо дали първоначалното действие е успешно или неуспешно, искате да запазите дневник на действието и да се уверите, че дневникът е COMMIT Тед. В този случай регистрирането PROCEDURE трябва да бъде AUTONOMOUS_TRANSACTION и съдържа COMMIT оператор и извикващият оператор не трябва (вероятно) да нямат нито едно от двете.
Така че, ако COMMIT от една PROCEDURE винаги се изисква и не зависи от това дали повикващият COMMIT s други данни, след това направете PROCEDURE AUTONOMOUS_TRANSACTION . Ако PROCEDURE s могат да бъдат групирани заедно и след това ROLLBACK като група, тогава не искате да ги правите AUTONOMOUS_TRANSACTION с.