крок 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. ) Хоча це, власне, не важливо, головне щоб ви добре
засвоїли, як це все працює. Отже, запишемо анонімний блок:
посперечатися. Але, є деякі обмеження! Що поробиш - таке життя!
- Не можна перевизначити процедуру або функцію, якщо їх сигнатури відрізняються
тільки іменами або видами.
Наприклад: чи - Не можна перевизначити процедуру або функцію, якщо їх сигнатури відрізняються
лише типами повертаються ними даних.
наприклад: - Типи параметрів процедур або функцій повинні належати різним
родин типів. Наприклад, CHAR і VARCHAR це одне і теж по
цього не можна перевизначати процедури ось так:
Поточний рейтинг теми: Ні