крок 99


www.ПЕРВИЕ ШАГІ.ru. Крок 99 - PL / SQL - Пакети - Перевизначення, функцій і процедур



Крок 99 - PL / SQL - Пакети - Перевизначення, функцій і процедур

Думаю, що напевно хтось з вас знайомий з мовами високого рівня і з
принципами об'єктно-орієнтоване програмування. Так ось. при визначенні
пакетів можна застосовувати дуже цікавий фокус під назвою "перевизначення
функцій і процедур "(overloaded). Наприклад в C ++ або C #. на
якому я зараз в основному пишу клієнтські частини для Oracle сервера,
є поняття "перевантажені функції". Коли в середовищі Visual Studio.NET. ви
відкриваєте дужку після визначальною сигнатури функції то бачите, то що
зображено на малюнку:

Цифра 7 означає, що функція має сім перевантажених сигнатур. При виборі
конкретної з них, спрацьовує саме та, чия сигнатура визначена в даний
момент. Процедури і функції всередині модуля (пакета) так само можуть бути
перевизначені. Тобто можна визначити кілька процедур або функцій з одним
і тим же ім'ям, але з різними параметрами. В PL / SQL - є сенс
застосовувати дане властивість пакета, стосовно до обробки об'єктів різних
типів. Тут як раз і є видимим, щось на кшталт або спроба привести
PL / SQL - до об'єктно-орієнтованої моделі, застосовуючи основні принципи
ООП. Давайте практично спробуємо це реалізувати. Запишемо такий заголовок
пакету:

Отримуємо після компіляції:

В даному випадку функція Add_One_Num має три типи ініціалізації. До
статі зверніть увагу на наступний цікавий факт:

Оп! А поле STATUS показує VALID. Але тіла то, ще взагалі немає!
Де логіка? Дивний факт, але залишимо це на совісті Лари Елісона. ) Створюємо
тіло пакета, щоб заспокоїти совість! запишемо:

Після компіляції отримуємо:

Чому ми і радіємо! Нарешті отримали пакет з перевизначеними функціями.
Тепер можна перевірити як поводиться наша трохи комічна функція
Add_One_Num. ) Хоча це, власне, не важливо, головне щоб ви добре
засвоїли, як це все працює. Отже, запишемо анонімний блок:

І знову арифметика за перший клас торжествує 2 плюс 2 дорівнює 4! І з цим не
посперечатися. Але, є деякі обмеження! Що поробиш - таке життя!
  1. Не можна перевизначити процедуру або функцію, якщо їх сигнатури відрізняються
    тільки іменами або видами.
    Наприклад: чи
  2. Не можна перевизначити процедуру або функцію, якщо їх сигнатури відрізняються
    лише типами повертаються ними даних.
    наприклад:
  3. Типи параметрів процедур або функцій повинні належати різним
    родин типів. Наприклад, CHAR і VARCHAR це одне і теж по
    цього не можна перевизначати процедури ось так:

Поточний рейтинг теми: Ні