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 для кожної схеми й звичайно використовується для виводу значення яких-небудь виражень.