Создание функций отличается от создания процедур практически названием инструкции и наличием оператора RETURN:
сreate[or replace] function имя_функции [(аргумент1 [{in | out | in out}] тип, … аргумент2 [{in | out | in out}] тип)] return возвращаемый тип{is|as} тело функции оператор return/
Оператор RETURNимеет общий синтаксис: RETURNвыражение. Выражение – это возвращаемое значение. Значение выражения преобразуется в тип, указанный в команде RETURNпри описании функции, если, конечно, это значение уже не имеет данный тип.
Ниже приведен пример создания простой хранимой функции:
create or replace function get_customer_address (last in varchar2, firsr in varchar2) return varchar2 is
addr varchar2(20);
begin
select address into addr
from customers
where lname=last and fname=first;
return addr;
exception
when others then return NULL;
end get_customer_address;/
Как видно из примера при создании процедур или функций ключевое слово DECLARE в разделе объявления подпрограмм не указывается.
Приложение может вызывать процедуру в анонимном блоке 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 перед и после указанных аргументов, а затем передает полученный блок серверу базы данных на выполнение.