Быстрый старт
Развертывание
Моделирование данных
Подключение
Запись данных
Миграция
Запросы
Операции и обслуживание
Типовое обслуживание
Секционирование
Резервное копирование и восстановление
Масштабирование
Зеркалирование
Управление ресурсами
Безопасность
Мониторинг
Настройка производительности
Устранение неполадок
Справочник
Руководство по инструментам
Типы данных
Хранилище данных
Выполняющая система
Потоковая передача
Восстановление после сбоев
Конфигурация
Индексы
Расширения
Справочник по SQL
Часто задаваемые вопросы
Определяет новую процедуру.
CREATE [OR REPLACE] PROCEDURE <name>
( [ [<argmode>] [<argname>] <argtype> [ { DEFAULT | = } <default_expr> ] [, ...] ] )
{ LANGUAGE <lang_name>
| TRANSFORM { FOR TYPE <type_name> } [, ... ]
| { [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER }
| SET <configuration_parameter> { TO <value> | = <value> | FROM CURRENT }
| AS '<definition>'
| AS '<obj_file>', '<link_symbol>'
} ...
Команда CREATE PROCEDURE определяет новую процедуру. Команда CREATE OR REPLACE PROCEDURE либо создаёт новую процедуру, либо заменяет существующее определение. Чтобы определить процедуру, пользователь должен обладать привилегией USAGE на язык.
Если указано имя схемы, то процедура создается в указанной схеме. В противном случае она создается в текущей схеме. Имя новой процедуры не должно совпадать с именем уже существующей процедуры, имеющей те же типы входных аргументов в той же схеме. Однако процедуры и функции с разными типами аргументов могут иметь одинаковые имена (перегрузка).
Чтобы обновить текущее определение существующей процедуры, используйте команду CREATE OR REPLACE PROCEDURE. Изменить таким способом имя или типы аргументов процедуры невозможно (это фактически создаст новую, отдельную процедуру).
При использовании CREATE OR REPLACE PROCEDURE для замены существующей процедуры владелец и права доступа к процедуре остаются без изменений. Все остальные свойства процедуры устанавливаются в соответствии со значениями, указанными или подразумеваемыми в команде. Вы должны быть владельцем процедуры, чтобы её заменить (включая членство в роли-владельце).
Пользователь, создавший процедуру, становится её владельцем.
Для возможности создания процедуры необходимо иметь привилегию USAGE на типы аргументов.
Дополнительную информацию о создании процедур см. в разделе «Определяемые пользователем процедуры» документации PostgreSQL.
name
argmode
argname
argtype
Тип(ы) данных аргументов процедуры (при необходимости с указанием схемы), если таковые имеются. Типы аргументов могут быть базовыми, составными или доменными, либо ссылаться на тип столбца таблицы.
В зависимости от языка реализации может быть разрешено указывать псевдотипы, такие как cstring. Псевдотипы означают, что фактический тип аргумента либо недостаточно определён, либо находится за пределами набора обычных SQL-типов данных.
Тип столбца указывается как table_name.column_name%TYPE. Использование этой возможности иногда помогает сделать процедуру независимой от изменений в определении таблицы.
default_expr
lang_name
TRANSFORM { FOR TYPE type_name } [, ... ] }
[EXTERNAL] SECURITY INVOKER
[EXTERNAL] SECURITY DEFINER
configuration_parameter
value
definition
Строковая константа, определяющая процедуру; значение зависит от языка. Это может быть внутреннее имя процедуры, путь к объектному файлу, SQL-команда или текст на процедурном языке.
Часто удобно использовать долларное кавычкование (см. «Строковые константы с долларным кавычкованием» в документации PostgreSQL) для записи строки определения процедуры вместо обычного синтаксиса с одинарными кавычками. Без долларного кавычкования все одинарные кавычки и обратные слэши в определении процедуры должны быть экранированы путём их удвоения.
obj_file, link_symbol
Дополнительные сведения о создании функций, применимые также к процедурам, см. в разделе CREATE FUNCTION.
Для выполнения процедуры используйте команду CALL.
CREATE PROCEDURE insert_data(a integer, b integer)
LANGUAGE SQL
AS $$
INSERT INTO tbl VALUES (a);
INSERT INTO tbl VALUES (b);
$$;
CALL insert_data(1, 2);
Команда CREATE PROCEDURE определена в стандарте SQL. Версия Database похожа, но не полностью совместима. Подробности см. также в разделе CREATE FUNCTION.