Процедуры PL/SQL: программирование на примерах

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

Общий формат процедуры PL/SQL выглядит так:


Оглавление статьи[Показать]


PROCEDURE [схема.]имя[( параметр[, параметр...] ) ]
   [AUTHID DEFINER | CURRENT_USER]
   [ACCESSIBLE BY (список)]
IS
   [объявления]
BEGIN
   исполняемые команды
[ EXCEPTION
    обработчики исключений]
END [имя];

 

Основные элементы этой структуры:

На рис. 1 показан код процедуры apply_discount, который содержит все четыре раздела, характерных для именованных блоков PL/SQL.

 

 Код процедуры

Рис. 1. Код процедуры

 

 

Вызов процедуры

Процедура вызывается как исполняемая команда PL/SQL. Другими словами, ее вызов должен заканчиваться точкой с запятой (;) и может предшествовать другим командам SQL либо PL/SQL (если таковые имеются) в исполняемом разделе блока PL/SQL или следовать за ними:

BEGIN
   apply_discount( new_company_id, 0.15 );
END;

Если процедура не имеет параметров, она может вызываться с пустыми круглыми скобками или без них:

display_store_summary;
display_store_summary();

 

Заголовок процедуры

Часть определения процедуры, предшествующая ключевому слову IS, называется заголовком процедуры, или сигнатурой. Заголовок предоставляет программисту всю информацию, необходимую для вызова процедуры:

В идеале программист при виде заголовка процедуры должен понять, что делает эта процедура и как она вызывается.

Заголовок процедуры apply_discount из предыдущего раздела выглядит так:

PROCEDURE apply_discount (
   company_id_in IN company.company_id%TYPE 
   , discount_in IN NUMBER
)

Он состоит из типа модуля, имени и списка из двух параметров.

 

Тело процедуры

В теле процедуры содержится код, необходимый для реализации этой процедуры; тело состоит из объявления, исполняемого раздела и раздела исключений этой процедуры. Все, что следует за ключевым словом IS, образует тело процедуры. Разделы исключений и объявлений не являются обязательными. Если обработчики исключений отсутствуют, опустите ключевое слово EXCEPTION и завершите процедуру командой END.

 

Метка END

Вы можете указать имя процедуры за завершающим ключевым словом END:

PROCEDURE display_stores (region_in IN VARCHAR2) IS 
BEGIN
   ...
END display_stores;

Имя служит меткой, явно связывающей конец программы с ее началом. Привыкните к использованию метки END. Она особенно полезна для процедур, занимающих несколько страниц или входящих в серию процедур и функций в теле пакета.

 

Команда RETURN

Ключевое слово RETURN обычно ассоциируется с функциями, поскольку они должны возвращать значения. Однако PL/SQL позволяет использовать команду RETURN в процедурах. Версия этой команды для процедур не принимает выражений и не может возвращать значения в вызывающий программный модуль — она просто прекращает выполнение процедуры и возвращает управление вызывающему коду.

Использовать эту разновидность RETURN не рекомендуется, поскольку в этом случае в процедуре появляются две и более точки выхода, а это усложняет логику выполнения. Избегайте использования RETURN и GOTO для обхода нормальной управляющей структуры в программных элементах.

Вас заинтересует / Intresting for you:

Управление приложениями PL/SQL...
Управление приложениями PL/SQL... 4654 просмотров Stas Belkov Thu, 16 Jul 2020, 06:20:48
Встроенные методы коллекций PL...
Встроенные методы коллекций PL... 14850 просмотров sepia Tue, 29 Oct 2019, 09:54:01
Символьные функции и аргументы...
Символьные функции и аргументы... 18598 просмотров Анатолий Wed, 23 May 2018, 18:54:01
Тип данных RAW в PL/SQL
Тип данных RAW в PL/SQL 12356 просмотров Doctor Thu, 12 Jul 2018, 08:41:33
Печать
Войдите чтобы комментировать

iSvetik аватар
iSvetik ответил в теме #10021 2 года 10 мес. назад
Великолепный мануал по написанию процедур на языке PL/SQL. Маст хэв каждый Ораклист!
agesy аватар
agesy ответил в теме #9230 5 года 7 мес. назад

apv пишет: Все по делу. Спасибо!


Поддержу. Синтаксис описан очень удачно и подробно. Примеры хороши. Понятно, для чего процедуры нужны и как их использовать в программах PL/SQL.
apv аватар
apv ответил в теме #9228 5 года 7 мес. назад
Все по делу. Спасибо!