Приложение может вызывать процедуру в анонимном блоке PL/SQL. Вызов функций может осуществляться либо в анонимном блоке посредством оператора присваивания, либо в условии WHEN SQL – оператора.
where address= get_customer_address (‘Иванов’,’Иван’);
УПРАВЛЕНИЕ БЛОКАМИ В SQL*Plus
Утилита SQL*Plus – это, пожалуй, самый простой из инструментов разработки программ PL/SQL. Обычно SQL*Plus поставляется вместе с сервером ORACLE и является частью стандартной системы. Он дает пользователям возможность вводить SQL – операторы и блоки в PL/SQL диалоговом режиме. При выполнении SQL – оператора в SQL*Plus заканчивать его необходимо точкой с запятой (см. вышеприведенные примеры). Точка с запятой не является элементом собственно оператора – это признак его окончания. В блоке же точка с запятой является синтаксическим элементом самого блока, а не признаком окончания некоторого оператора. При вводе пользователем ключевого слова DECLARE или BEGIN SQL*Plus распознает это и понимает, что пользователь запускает на выполнение блок PL/SQL, а не SQL – оператор. Признаком завершения блока является косая черта, которая соответствует команде RUN SQL*Plus.
Как уже указывалось, хранимые процедуры можно вызывать только из выполняемого раздела или из раздела обработки исключительных ситуаций блока PL/SQL. В SQL*Plus предлагается удобный и более простой способ вызова хранимых процедур – команда ЕХЕСUТЕ, которая принимает заданные аргументы, автоматически размещает ключевые слова BEGIN и END перед и после указанных аргументов, а затем передает полученный блок серверу базы данных на выполнение.
Модули
Модуль (package) – это группа процедур, функций и других конструкций, хранимых вместе в базе данных как одна единица. Модули особенно полезны для компоновки нескольких процедур и функций, имеющих отношение к конкретному приложению баз данных.
Модуль состоит из двух частей: описания и тела.
• Описание модуля (package specification) определяет интерфейс связи с этим модулем. В описании модуля объявляются все переменные и именованные константы, курсоры, процедуры, функции и другие конструкции модуля, которые необходимо сделать доступными для программ, внешних по отношению к этому модулю. Другими словами, всё объявленное в описании модуля является общим.
• В теле модуля (package body) определяются все общие процедуры и функции, объявленные в описании модуля. Кроме того, в тело модуля могут включаться определения других конструкций, не указанных в его описании. Такие конструкции модуля являются частными, т. е. доступными только для программ внутри модуля.
Все переменные, константы и курсоры, объявленные в описании или в теле модуля, считаются глобальными. В отличие от частных переменных, констант и курсоров, объявленных в определенных процедурах и функциях, глобальные конструкции доступны всем процедурам и функциям модуля. Во время сеанса работы состояние глобальных конструкций не зависит от действий, выполняемых какими-либо подпрограммами модуля.
Ниже приведен пример определения описания модуля и его тела:
сreate or replace package part_mgmt is
--глобальная переменная
сurrent_part parts %rowtype;
--процедуры и функции
--insert_part вводит новый элемент ассортимента в таблицу parts