Oracle
 sql >> база данни >  >> RDS >> Oracle

Какъв е ефектът от поставянето на комит след DML в процедура?

Какъв е ефектът от поставянето на този комит в програмата?

Документацията на 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 с.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle SQL, конкатениране на множество колони + добавяне на текст

  2. Как да издигнем изключение в тригер? Има ли начин да се направи това?

  3. ефективен начин за тестване дали съществува ред в таблица

  4. Java - Как да извика процедура на Oracle с персонализирани типове?

  5. Определяне дали данните за полето в Oracle са от тип число