формационных систем или систем, предназначенных для многократного
тиражирования, часто используется трехзвенная архитектура системы с
переносом значительной части бизнес-логики на уровень сервера прило-
жений. Практикуется и такой вариант: серверная часть тиражируемой
информационной системы разрабатывается сразу для нескольких самых
распространенных СУБД (например, вариант для Oracle, PostgreSQL и
Microsoft SQL Server).
Следует отметить, что хранимые процедуры и функции не следует
рассматривать как альтернативу сложным SQL-запросам. По сравнению с
«чистым» SQL любая процедурная альтернатива является худшим вариан-
том с точки зрения производительности, поскольку SQL-запросы любая
СУБД обрабатывает с наивысшей эффективностью. Поэтому не нужно
поддаваться соблазну и переходить на уровень процедурной логики там,
где можно, пусть ценой больших мыслительных усилий, написать слож-
ный, но эффективный запрос с использованием только средств языка SQL.
Создание хранимых процедур и функций
В Oracle традиционно основным языком хранимых процедур являет-
ся язык PL/SQL, но поддерживаются и процедуры на других языках, пре-
жде всего – на языках C++ и Java. В последнем случае хранимая процеду-
ра или функция называется внешней. В рамках нашего курса рассмотрим
основной вариант – хранимая процедура на PL/SQL.
Хранимая процедура создается оператором SQL
CREATE [OR REPLACE] PROCEDURE имя[(список_параметров)]
AS
блок PL/SQL
Необязательная конструкция OR REPLACE позволяет заменять про-
цедуру с таким же именем. Это очень удобно в процессе отладки.
Аналогично создается хранимая функция:
CREATE [OR REPLACE] FUNCTION имя[(список_параметров)]
RETURN тип_результата, возвращаемого функцией
AS
блок PL/SQL, обязательно содержащий оператор
В списке параметров должен быть описан режим использования ка-
ждого параметра:
RETURN выражение
IN (только входной – используется по умолчанию),
OUT (только выходной), IN OUT
При описании локальных переменных подпрограммы разрешено
опускать ключевое слово DECLARE.
(и входной, и выходной). Режим ис-
пользования указывается после имени параметра. Типы параметров, как и
типы переменных, можно указывать явно или с помощью ссылки на соот-
ветствующий столбец или таблицу.