Загалом, процедури не повинні здійснюватись. Такі рішення щодо контролю транзакцій слід залишити коду вищого рівня, який знає, коли логічна транзакція фактично завершена. Якщо ви здійснюєте всередині збереженої процедури, ви обмежуєте її повторне використання, тому що абонент, який хоче, щоб зміни, які вносить процедура, були частиною більшої транзакції, не можуть просто викликати процедуру безпосередньо.
Якщо ви зателефонуєте на процедуру в інтерактивному режимі, вам доведеться явно здійснити або відмовити транзакцію, оскільки Oracle не має уявлення, чи плануєте ви виклик процедури бути логічною транзакцією або якщо ви маєте намір скласти більшу транзакцію, що включає декілька процедурних дзвінків. Якщо ви користуєтесь dbms_scheduler
, dbms_scheduler
припускайте, що робота є логічною транзакцією і здійснює в кінці завдання, вважаючи, що вона була успішною ( dbms_job
робить те ж саме).
Функції не повинні в першу чергу маніпулювати даними. Функцію, яка маніпулює даними, не можна викликати з оператора SQL (заборона кутового випадку, коли сама функція оголошується використовувати автономну транзакцію, що майже ніколи не підходить). Вся суть у функціях та процедурах полягає в тому, що функції можна вбудовувати в оператори SQL і можна вільніше надавати користувачам, оскільки вони не змінюють жодних даних.