DROP PROCEDURE#
DROP PROCEDURE
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
Автоматически удаляйте объекты, которые зависят от процедуры, а также все объекты, которые зависят от этих объектов (см. Раздел 5.14).
RESTRICT
Отказаться от удаления процедуры, если от нее зависят какие-либо объекты. Это значение по умолчанию.
Примечания
Если существует только одна процедура с заданным именем, список аргументов можно опустить. В этом случае также можно опустить скобки.
В Tantor BE достаточно перечислить входные аргументы (включая INOUT
), поскольку две процедуры с одинаковым именем не могут иметь одинаковый список входных аргументов. Более того, команда DROP
фактически не проверяет правильность указания типов аргументов OUT
; поэтому любые аргументы, явно помеченные как OUT
, являются просто шумом. Однако рекомендуется указывать их для согласованности с соответствующей командой CREATE
.
Для обеспечения совместимости со стандартом SQL также допускается записывать все типы данных аргументов (включая те, которые относятся к аргументам OUT
) без каких-либо маркеров argmode
. При этом типы аргументов OUT
процедуры будут проверяться по команде. Это положение создает неоднозначность, поскольку при отсутствии маркеров argmode
в списке аргументов неясно, какое правило предполагается. Команда DROP
будет пытаться выполнить поиск обоими способами и выдаст ошибку, если будет найдено две разные процедуры. Чтобы избежать риска такой неоднозначности, рекомендуется явно указывать маркеры IN
вместо их использования по умолчанию, тем самым принуждая использовать традиционную интерпретацию Tantor BE.
Правила поиска, только что объясненные, также используются другими командами, которые действуют на существующие процедуры, такие как 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) ...
Совместимость
Эта команда соответствует стандарту SQL, с расширениями Tantor BE:
Стандарт позволяет удалять только одну процедуру за одну команду.
Опция
IF EXISTS
является расширением.Возможность указания режимов и имен аргументов является расширением, и правила поиска отличаются, когда указаны режимы.