Які переваги пакунків над автономними процедурами та функціями?


13

Шукаєте канонічну відповідь на питання, чому слід віддавати перевагу пакетам у базі даних Oracle над окремими процедурами та функціями.

Відповіді:


12

Переваги пакетів

Логічне групування - методи, що працюють разом, можуть бути об'єднані в згуртовану одиницю, а не просто логічно зв'язані, а фізично окремі.

Безпечні приватні методи - Функції та процедури можна зробити приватними для пакета та використовувати лише в ньому. Це робить публічну поверхню простішою та безпечнішою.

Управління привілеями - дозволи можуть бути надані один раз для групи процедур, які працюють разом, а не окремо для кожної необхідної процедури / функції.

Безпечне обгортання - загорнуті пакети складніше розгортати, ніж загорнуті функції / процедури.

Спрощена назва - більший простір імен дозволяє імена, які є більш простими і можуть бути повторно використані в інших пакетах.

Краща ефективність - Пакети можуть бути складені та завантажені в пам'ять у повному обсязі, а не на частини, як інші методи. Ця вигода, якщо вона взагалі існує, мінімальна порівняно з іншими перевагами.

Зменшена інвалідність - Зміна тіла пакета не приводить до недійсності залежностей, як це робить зміна функції чи процедури.

Унікальні особливості - Змінні пакети, Константи упаковки, Ініціалізація, Стан сесії, Коментарі до пакунків та Перевантажені методи.

Посилання:
Посібник з концепцій 11.2
Задайте Тому Питання
StackOverflow.com Питання щодо продуктивності пакету
Розкручування презентації PL / SQL (pdf)


2
Я повинен не погодитися з користю від продуктивності. Якщо завантаження коду в пам'ять є помітною подією очікування, сталося щось дуже погане. І є велика ймовірність, що той факт, що пакети знизять продуктивність, тому що вам доведеться читати більше коду, коли ви завантажуєте весь пакет, коли вам справді потрібен був єдиний метод. Але в жодному випадку різниця в продуктивності не буде вимірюваною.
Джастін Печера

@Justin - Ця точка з Посібника з концепцій 11.2. Ось що говорить: "Краща продуктивність - весь пакет завантажується в пам'ять невеликими шматками, коли процедура в пакеті викликається вперше. Це завантаження виконується за одну операцію, на відміну від окремих навантажень, необхідних для автономних Процедури. Коли відбувається виклик відповідних пакуваних процедур, для введення компільованого коду в пам'ять не потрібні введення / виведення диска. "
Лі Ріффел

4
Я погоджуюся, що документація стверджує, що є корисність для виконання. Документація невірна або, як мінімум, недостатня. У кращому випадку величина «користі» - мізерна. І ознака вигоди невідома. Так само, як сканування таблиці є більш ефективним, якщо ви читаєте більшість рядків, а доступ до індексу є більш ефективним, якщо ви читаєте один рядок, читання всього пакета в пам'яті за один раз буде корисним, якщо ви збираєтесь використовувати кожен метод і невигідний, якщо ви дійсно хотіли лише одного методу.
Джастін Печера

1
@Justin - Ваша оцінка звучить логічно. Я не знайшов нічого остаточного в тому чи іншому випадку, тому я додав застереження до пункту відповіді. Дякуємо за ваш внесок.
Лі Ріффель

Я думаю, що ця перевага від продуктивності схожа на кешування. Якщо ви використовуєте лише цю процедуру і використовуєте її рідше, ви не отримаєте жодної користі від продуктивності. Але якщо ви часто використовуєте його та використовуєте будь-яку іншу процедуру в цьому пакеті, ви отримуєте переваги. Розробник у всьому світі використовує кешування, оскільки покращується не реальна ефективність, а сприйнята продуктивність. Оскільки пов'язані процедури містяться в одному пакеті, цілком логічно, що будуть називатися і деякі інші процедури. Це все про ймовірність викликати дві процедури в одному пакеті. І зазвичай, читаючи з великою часткою ймовірності, це відбувається.
Atilla Ozgur
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.