Хранимые подпрограммы - это именуемые блоки кода SQL, которые заранее откомпилированы и хранятся на сервере для того, чтобы быстро проводить обработку запросов, валидацию данных и другие часто выполняемые функции. Помимо хранимых процедур, существуют локальные.
Отличия от локальных подпрограмм: (в скобках про локальные подпрограммы).
- Сохраняются в БД в скомпилированном p-коде, при вызове подпрограмму не надо компилировать. (Компилируются фрагменты и блоки, содержащиеся в них. При повторном выполнении делается новая компиляция.)
- Могут вызываться из любого блока, запущенного на выполнение пользователем, имеющий привилегии EXECUTE для этой подпрограммы. (Могут вызываться только из блока, что удерживает их.)
- Код подпрограммы сохраняется отдельно от вызывающего блока, поэтому вызывающий блок короче и легче для понимания. Кроме того, при желании с подпрограммой и вызывающим блоком можно работать отдельно. (Подпрограмма и вызывающий блок находятся в одном месте, что может привести к путанице. Если изменения вносятся в вызывающий блок, то подпрограмму необходимо компилировать заново.)
- Скомпилирован p-код можно закрепить в пуле, разделяемой с помощью модульной процедуры DBMS_SHARED_POOL.KEEP. Это приводит к повышению производительности системы в целом. (Локальные подпрограммы нельзя закреплять в разделяемом пуле.)
Функция - это подпрограмма, которая вычисляет значение. Функции улучшают производительность, экономят память, позволяют избегать повторений кода.
Синтаксис функции:
- CREATE [OR REPLACE] FUNCTION FuncName (ParamName [IN|OUT|IN OUT] ParamType, …)
- RETURN Type_Return_Param
- IS
- Объявления Переменных
- BEGIN
- Выполняемые инструкции
- [EXCEPTION
- Обработчики исключений]
- END;