Какъв е ефектът от поставянето на този комит в програмата?
Документацията на 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
с.