Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
34
Добавлен:
17.04.2018
Размер:
189.44 Кб
Скачать

5.2. Языковые конструкции, обеспечивающие модульность

Процедуры, функции и триггеры PL/SQL помогают легко реализовывать сложные алгоритмы модульным способом (т.е. компонент за компонентом, причем одни компоненты многократно используются другими). Сохранение их на сервере Oracle дает двоякую выгоду: возможность повторного использования с предсказуемыми результатами и очень быстрое выполнение, поскольку серверные операции почти или совсем не требуют обращения к сети.

Хранимые процедуры

Хранимая процедура — это определенный набор инструкций, написанных на языке PL/SQL. Вызов процедуры приводит к выполнению содержащихся в ней инструкций. Процедура хранится в базе данных, поэтому и называется хранимой.

Хранимая процедура может выполнять SQL-операторы и манипулировать данными в таблицах. Ее можно вызывать из другой хранимой процедуры PL/SQL, хранимой функции или триггера, а также непосредственно из строки приглашения SQL*Plus или другого инструментального средства.

Процедура состоит из двух основных частей: спецификации и тела. Спецификация процедуры (procedure specification) включает в себя имя процедуры и описание ее входных и выходных данных. Эти входные и выходные данные называются формальными параметрами (formal parameters) или формальными аргументами (formal arguments). Если при вызове процедуры указываются параметры командной строки или другие входные данные, эти значения называются фактическими (actual) параметрами или фактическими аргументами.

Рассмотрим некоторые примеры спецификаций процедур. Спецификация не содержит никакого кода; в ней определяется только имя процедуры, а также ее входные и выходные параметры.

rtm_ytd_reports

Эта простая спецификация содержит только имя процедуры. Данная процедура не имеет параметров.

increase_prices (percent_increase NUMBER)

Этой процедуре при вызове может быть передано значение. Внутри процедуры значение будет известно под именем PERCENT_INCREASE. Обратите внимание, что здесь указан тип данных: NUMBER.

increase_salary_find_tax (increase_percent IN NUMBER := 7,

sal IN OUT NUMBER,

tax OUT NUMBER

)

Это спецификация процедуры с тремя формальными параметрами. Слово IN после имени параметра означает, что при вызове процедура может считать из этого параметра входное значение. Слово OUT означает, что процедура может использовать данный параметр для возврата значения в ту программу, из которой она была вызвана. Комбинация IN OUT после имени параметра говорит о том, что параметр может использоваться как для передачи значения процедуре, так и для возврата значения.

Параметру INCREASE_PERCENT в этом примере присвоено значение по умолчанию (default value), равное 7, путем добавления := 7 после типа данных. Таким образом, если процедура будет вызвана без указания процента прироста, она увеличит переданное значение зарплаты на 7% и рассчитает налог, исходя из новой зарплаты.

Типы данных в процедуре не могут иметь спецификаций размера. Например, можно указать для параметра тип данных NUMBER, но не NUMBER(10,2).

Помимо спецификации процедуры необходимо задать тело процедуры (procedure body), являющееся блоком PL/SQL-кода, в котором запрограммированы вычисления. Структура блока PL/SQL рассматривается в п. 5.3..

Соседние файлы в папке Lab5