Хранимые подпрограммы - это именуемые блоки кода SQL, которые заранее откомпилированы и хранятся на сервере для того, чтобы быстро проводить обработку запросов, валидацию данных и другие часто выполняемые функции. Помимо хранимых процедур, существуют локальные.
Отличия от локальных подпрограмм: (в скобках про локальные подпрограммы).
- Сохраняются в БД в скомпилированном p-коде, при вызове подпрограмму не надо компилировать. (Компилируются фрагменты и блоки, содержащиеся в них. При повторном выполнении делается новая компиляция.)
- Могут вызываться из любого блока, запущенного на выполнение пользователем, имеющий привилегии EXECUTE для этой подпрограммы. (Могут вызываться только из блока, что удерживает их.)
- Код подпрограммы сохраняется отдельно от вызывающего блока, поэтому вызывающий блок короче и легче для понимания. Кроме того, при желании с подпрограммой и вызывающим блоком можно работать отдельно. (Подпрограмма и вызывающий блок находятся в одном месте, что может привести к путанице. Если изменения вносятся в вызывающий блок, то подпрограмму необходимо компилировать заново.)
- Скомпилирован p-код можно закрепить в пуле, разделяемой с помощью модульной процедуры DBMS_SHARED_POOL.KEEP. Это приводит к повышению производительности системы в целом. (Локальные подпрограммы нельзя закреплять в разделяемом пуле.)
Процедура – подпрограмма, которую вызывают для того, чтобы выполнить некоторое действие.
Хранимые процедуры позволяют повысить производительность, расширяют возможности программирования и поддерживают функции безопасности данных.
Вместо хранения часто используемого запроса, клиенты могут ссылаться на соответствующую хранимую процедуру. При вызове хранимой процедуры её содержимое сразу же обрабатывается сервером.
Структура:
- CREATE [OR REPLACE] PROCEDURE имя_процедуры
- [(параметр [, параметр, …])] IS
- [локальные объявления]
- BEGIN
- исполняемые предложения
- [EXCEPTION
- обработчики исключений]
- END [имя_процедуры];
Вызов:
EXEC имя_процедуры;
Удаление:
DROP PROCEDURE имя_процедуры;