Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Lab_04_Oracle %28PL_SQL%29 / Додатково_Теорія_02_Процедури_функції_мови_PL_SQL

.pdf
Скачиваний:
6
Добавлен:
11.02.2015
Размер:
207.48 Кб
Скачать

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