- •5. Назначение языка pl/sql и его языковых конструкций
- •5.1. Начальные сведения
- •5.2. Языковые конструкции, обеспечивающие модульность
- •Хранимые процедуры
- •Хранимые функции
- •Триггеры
- •Отличие хранимых процедур от sql-сценариев
- •5.3. Структура блока pl/sql
- •Секция заголовка
- •Секция объявлений
- •Выполняемая секция
- •Секция исключений
- •5.4. Создание простой pl/sql-процедуры
- •Вызов процедур и функций
- •5.5. Переменные и константы pl/sql
- •Объявление переменных pl/sql
- •Объявление констант pl/sql
- •Присваивание значений переменным
- •Использование переменных
Объявление констант pl/sql
Синтаксис объявления константы имеет следующий вид:
имя_переменной тип_данных CONSTANT := выражение;
В отличие от переменных константам обязательно присваивается значение, которое нельзя изменять на протяжении времени жизни константы. Константы очень полезны для поддержания безопасности и дисциплины при разработке больших и сложных приложений. Например, если вы хотите гарантировать, что процедура PL/SQL не будет модифицировать передаваемые ей данные, можете объявить их константами. Если процедура все же попытается их модифицировать, PL/SQL активизирует исключение.
Присваивание значений переменным
Есть три способа изменения значения переменной. Во-первых, ей можно присвоить значение выражения, использовав оператор присваивания PL/SQL:
имя_переменной := выражение;
Во-вторых, переменная может быть передана PL/SQL-процедуре в качестве фактического параметра, соответствующего одному из формальных параметров IN OUT или OUT. После завершения процедуры значение переменной может измениться. Это демонстрируется в приведенном ниже примере, где для вызова процедуры использована именованная нотация.
CREATE PROCEDURE hike_priсes (old_price NUMBER,
percent_hike NUMBER := 5,
new_price OUT NUMBER)
IS
BEGIN
new_price := old_price + old_price * percent_hike / 100;
END hike_prices;
/
DECLARE
price_to_hike NUMBER(6,2) := 20;
hiked_price NUMBER(6,2) := 0;
BEGIN
dbms_output.put_line('Price before hike ' I I price_to_hike);
dbms_output.put_line('hiked_price before hike ' I I hiked_price);
hike_prices (old_price => price_to_hike, new_price => hiked_price) ;
dbms_output.put_line ( 'price_to_hike after hike ' || price_to_hike) ;
dbms_output.put_line ( 'hiked_price after hike ' || hiked_price) ;
END;
Третий способ изменения или присваивания значений использует предложение INTO в операторе SELECT:
DECLARE
product_quant NUMBER;
BEGIN
SELECT quantity_on_hand
INTO product_quant
FROM product
WHERE product_name = 'Small Widget';
dbms_output.put_line ('Small Widget ' || product_quant) ;
END;
Переменной product_quant присваивается значение, равное количеству товара Small Widget.
Использование переменных
Переменные являются фундаментальными компонентами PL/SQL-npoграмм. Они используются для хранения результатов вычислений, возврата значений функций, в качестве фактических параметров при вызовах функций и процедур, и т.д. Переменные позволяют сделать код приложений более понятным и легким для чтения, а сами приложения — более эффективными.
Предположим, что нужно выполнить вычисления с использованием текущего количества товара Small Widget — сравнить его с тем, которое было три месяца назад, или с количеством товара Medium Wodget. Используя для хранения этого количества переменную, можно избежать задержек, связанных с многократным считыванием значения из таблицы.
Присваивание переменным информативных имен облегчает чтение и понимание кода. Такой же эффект дает использование переменных для хранения результатов каких-нибудь очень сложных выражений вместо многократного включения этих выражений в код.