Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Работа с Oracle / 16 - Процедуры и функции в PL SQL.ppt
Скачиваний:
12
Добавлен:
28.06.2021
Размер:
584.7 Кб
Скачать

Функция compute_discounts (1)

--Расчет скидки на заказ.

--Входной параметр - сумма заказа.

--Возвращается сумма скидки

--(нуль при неверных входных данных).

CREATE FUNCTION compute_discounts (order_amt NUMBER)

RETURN NUMBER IS

small_order_amt NUMBER := 400; large_order_amt NUMBER := 1000; small_disct NUMBER := 1;

large_disct NUMBER := 5;

Функция compute_discounts (2)

BEGIN

IF (order_amt < large_order_amt AND order_amt >= small_order_amt)

THEN

RETURN (order_amt * small_disct / 100) ; ELSIF (order_amt >= large_order_amt) THEN

RETURN (order_amt * large_disct / 100); ELSE

RETURN(0);

END IF;

END compute_discounts;

Использование функции compute_discounts (1)

SET SERVEROUTPUT ON; DECLARE

tiny NUMBER := 20; med NUMBER := 600; big NUMBER := 4550; wrong NUMBER := -35;

BEGIN

dbms_output.put_line (' Order AND Discount ');

dbms_output.put_line (tiny || ' ' || compute_discounts(tiny));

Использование функции compute_discounts (2)

dbms_output.put_line (med || ' ' || compute_discounts (med));

dbms_output.put_line (big || ' ' || compute_discounts (big));

dbms_output.put_line (wrong || ' ' || compute_discounts (wrong));

END;

/

Пакеты

Пакет – группа процедур, функций и др. конструкций, хра- нимых в БД как единое целое. Пакеты полезны для создания группы процедур и функций, относящихся к приложению.

Пакет состоит из двух частей:

Спецификация пакета. Интерфейс пакета. Объявляются переменные пакета, константы, курсоры, процедуры, функции, доступные для программ за пределами пакета.

Тело пакета. Определяются процедуры­ и функции, объявленные в спецификации. Включает определения конст­ рукций, не объявленных в спецификации, которые доступны только для программ внутри пакета.

Глобальные конструкции

Переменные, константы и курсоры, объявленные в специфи- кации или в теле пакета, вне подпрограммы считаются

глобальными.

В отличие от локальных переменных, констант и курсоров, объявленных внутри процедур и функций, глобальные кон- струкции доступны всем процедурам и функциям пакета.

Их состояние в течение сеанса остается постоянным независимо от подпрограмм пакета.

Объявление глобальных переменных­ (и др. глобальных кон- струкций) предполагает­ использование префикса g_.

Пример создания спецификации пакета