Lab_04_Oracle %28PL_SQL%29 / Додатково_Теорія_02_Процедури_функції_мови_PL_SQL
.pdf
Функція повертає значення BALANCE для даного рахунку. Фраза RETURN пропозиції CREATE FUNCTION специфікує тип даних значення, що повертається, як NUMBER.
Ця функція використовує пропозицію SELECT, щоб вибрати стовпець BALANCE з рядка, що ідентифікується аргументом ACC_NO, у таблиці ACCOUNTS. Функція використовує пропозицію RETURN, щоб повернути це значення в середовище, з якого вона була викликана.
Команда ALTER FUNCTION
Призначення. Перекомпілювати незалежну збережену функцію. Умови. Функція повинна бути у вашій схемі, або ви повинні мати
системний привілей ALTER ANY PROCEDURE.
Синтаксис.
ALTER FUNCTION команда ::=
де схема – це схема, що містить функцію. Якщо цей параметр опу-щений, ORACLE вважає, що функція перебуває у вашій схемі;
функция – ім'я функції, що перекомпілюється;
COMPILE змушує ORACLE перекомпілювати функцію. Ключове слово COMPILE обов'язкове.
Ви можете використовувати команду ALTER FUNCTION для явної перекомпіляції недійсної функції. Явна перекомпіляція усуває необхідність у неявній перекомпіляції часу виконання й запобігає пов'язаним із цим помилкам компіляції й накладним витратам.
Зауваження. Ця команда не змінює оголошення або визначення існуючої функції. Щоб переоголосити або перевизначити функцію, використовуйте команду CREATE FUNCTION з опцією OR REPLACE.
Наприклад, оператор, що випливає, явно перекомпілює функцію GET_BAL, що належить користувачеві PETROV:
ALTER FUNCTION petrov.get_bal
COMPILE
Якщо ORACLE не зустріне помилок при перекомпіляції, то функція GET_BAL стане дійсною. ORACLE зможе згодом виконувати її без перекомпіляції під час виконання. Якщо при перекомпіляції GET_BAL зустрінуться помилки, то ORACLE поверне повідомлення про помилку, а GET_BAL залишиться недійсною. ORACLE також позначить як недійсні всі об'єкти, які залежать від GET_BAL. Якщо ви згодом звернетеся до одного з таких об'єктів без його явної попередньої перекомпіляції, то ORACLE неявно перекомпілює його під час виконання.
Команда DROP FUNCTION
Призначення. Видаляє незалежну збережену функцію з бази даних. Умови. Функція повинна бути у вашій схемі, або ви повинні мати
системний привілей DROP ANY PROCEDURE.
Синтаксис.
DROP FUNCTION команда ::=
де схема – це схема, що містить функцію. Якщо СХЕМА опущена, то ORACLE вважає, що функція перебуває у вашій схемі;
функция – ім'я функції, що видаляється.
Коли ви видаляєте функцію, ORACLE робить недійсними всі локальні об'єкти, які залежать від цієї функції (тобто викликають її). Якщо ви згодом звертаєтеся до одномго з таких об'єктів, то ORACLE намагається перекомпілювати його і повертає помилку, якщо виявиться, що ви ще не перестворили вилучену функцію.
Ви можете за допомогою цієї команди видалити тільки незалежну функцію.
Наприклад, оператор, що випливає, видаляє функцію NEW_ACCT у
схемі RIDDLEY:
DROP FUNCTION riddley.new_acct;
Коли ви видаляєте функцію NEW_ACCT, ORACLE робить недійсними всі об'єкти, які залежать від цієї функції.
2.1.6. Подання команд створення, зміни й видалення функцій у форматі BNF
При розробці користувальницьких додатків необхідно звернути увагу на відмінність процедур і функцій.
Функція PL/SQL відрізняється від процедури тим, що значення, яке повертається, розташовано в її імені, так само, як і в стандартних функціях (наприклад, SIN, ABS, SUBSTR). Для опису типу, розташо-ваного в імені значення, у синтаксис функції включена фраза «RETURN datatype»:
CREATE [OR REPLACE] FUNCTION [schema.]name [ (argument [ IN | OUT | IN OUT ] datatype
[, argument [ IN | OUT | IN OUT ] datatype ] ...) ] RETURN datatype IS pl/sql_subprogram_body
END [name];
Для видалення опису функції і її перекомпіляцій використовуються команди:
DROP FUNCTION [schema.] name ;
й
ALTER FUNCTION [schema.] name COMPILE ;
Створимо збережену функцію, що виконує ті ж дії, що й процедура. Текст її тіла відрізняється від тексту тіла процедури наявністю опису значення, що повертається, (RETURN VARCHAR2) і пропозицією RETURN vychod, що завершує виконання функції й привласнює значення її ім'я:
CREATE OR REPLACE FUNCTION fio -- ім'я функції
(tekst VARCHAR2)
--параметр (текст прізвища, ім'я або по батькові)
--й тип даних цього тексту
RETURN VARCHAR2 -- тип значення, що повертається
IS
-- опис локальних змінних, використовуваних у тілі функції vychod VARCHAR2(20);
kol INTEGER;
BEGIN -- початок тіла функції
. . .
--тіло функції, що відрізняються від
--тексту тіла процедури лише наявністю
--його останньому рядку команди RETURN vychod
. . .
RETURN vychod; END fio;
/
Текст команди відносно створення функції вводиться в Oracle так же, як і текст процедури. Виклик функції PL/SQL можна здійснити в тих же місцях, де й виклик стандартної функції. Наприклад, у списку фрази
SELECT команди:
SELECT fio ('Жан - Жак Руссо') Прізвище FROM DUAL;
Результат її виконання має вигляд:
ПРІЗВИЩЕ
-- -- -- -- -- -- -- -- -- --
Жан - Жак Руссо
Тут використовувалася спеціальна однорядкова таблиця DUAL, що створюється Oracle для кожної схеми й звичайно використовується для виводу значення яких-небудь виражень.
