DROP PROCEDURE
Эта страница переведена при помощи нейросети GigaChat.
DROP PROCEDURE
— удаление процедуры.
Синтаксис
DROP PROCEDURE [ IF EXISTS ] name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ] [, ...]
[ CASCADE | RESTRICT ]
Описание
DROP PROCEDURE
удаляет определение одной или нескольких существующих процедур. Чтобы выполнить эту команду, пользователь должен быть владельцем процедур(ы). Поскольку в базе данных могут существовать процедуры с одинаковым именем, но разными списками аргументов, при удалении обычно необходимо указывать типы аргументов.
Параметры
IF EXISTS
- Подавляет ошибку, если указанная процедура не существует, вместо этого выводится уведомление.
name
- Указывает имя процедуры, при необходимости дополненное схемой, которая должна быть удалена.
argmode
- Задает режим аргумента процедуры:
IN
,OUT
,INOUT
илиVARIADIC
. По умолчанию используетсяIN
, но учтите замечания, описанные ниже.
argname
- Задает имя аргумента процедуры. Это имя не влияет на поведение
DROP PROCEDURE
, так как для определения идентичности процедуры требуются только типы данных аргументов.
argtype
- Задает тип(ы) данных аргументов процедуры, при необходимости дополненное схемой, если есть. Ниже описана дополнительная информация.
CASCADE
- Автоматически удаляет объекты, которые зависят от процедуры, а также все объекты, зависящие от этих объектов.
RESTRICT
- Запрещает удаление процедуры, если какие-либо объекты зависят от нее. Это значение по умолчанию.
Примечания
Если в системе существует только одна процедура с заданным именем, список аргументов можно не указывать, при этом также опустите круглые скобки.
В PostgreSQL достаточно указать только входные аргументы (включая INOUT
), поскольку не допускается наличие двух процедур с одинаковым списком входных аргументов. Кроме того, команда DROP
не будет проверять корректность типов OUT
аргументов — такие аргументы в списке считаются шумом, но их рекомендуется включать для согласованности с определением в CREATE PROCEDURE
.
В целях совместимости со стандартом SQL также разрешено указывать все типы аргументов (включая OUT
) без указания режимов argmode
(IN
, OUT
, INOUT
). В этом случае типы OUT
аргументов будут сверяться с указанными при создании.
Такой подход может привести к неоднозначности, если режимы аргументов не указаны, система не сможет однозначно определить, по какому правилу производить поиск. В подобных ситуациях DROP PROCEDURE
попытается выполнить поиск обоими способами и выдаст ошибку, если будут найдены две разные процедуры.
Чтобы избежать неоднозначности, рекомендуется всегда явно указывать режим IN
, даже если он установлен по умолчанию, — это гарантирует использование классической интерпретации PostgreSQL.
Описанные правила поиска процедур применяются не только к DROP PROCEDURE
, но и к другим командам, работающим с существующими процедурами, такими как ALTER PROCEDURE
, COMMENT ON PROCEDURE
.
Примеры
Если в базе данных определена единственная процедура с именем do_db_maintenance
, то достаточно следующей команды:
DROP PROCEDURE do_db_maintenance;
Для процедуры, определенной следующим образом:
CREATE PROCEDURE do_db_maintenance(IN target_schema text, OUT results text) ...
подойдут любые из следующих команд:
DROP PROCEDURE do_db_maintenance(IN target_schema text, OUT results text);
DROP PROCEDURE do_db_maintenance(IN text, OUT text);
DROP PROCEDURE do_db_maintenance(IN text);
DROP PROCEDURE do_db_maintenance(text);
DROP PROCEDURE do_db_maintenance(text, text); -- potentially ambiguous
Однако последняя команда будет неоднозначной, если существует, например, такая процедура:
CREATE PROCEDURE do_db_maintenance(IN target_schema text, IN options text) ...
Совместимость
Команда DROP PROCEDURE
соответствует стандарту SQL, однако PostgreSQL предоставляет расширения:
- Стандарт разрешает удалять только одну процедуру за раз.
- Параметр
IF EXISTS
является расширением. - Возможность указать режимы и имена аргументов является расширением, а правила поиска различаются при задании режимов.
Смотрите также
CREATE PROCEDURE, ALTER PROCEDURE, DROP FUNCTION, DROP ROUTINE