DROP ROUTINE
DROP ROUTINE — удалить подпрограмму
Синтаксис
DROP ROUTINE [ IF EXISTS ]имя[ ( [ [режим_аргумента] [имя_аргумента]тип_аргумента[, ...] ] ) ] [, ...] [ CASCADE | RESTRICT ]
Описание
DROP ROUTINE удаляет определение одной или нескольких подпрограмм. «Подпрограммами» считаются агрегатные и обычные функции, а также процедуры. Описание параметров, дополнительные примеры и подробности приведены в описаниях DROP AGGREGATE, DROP FUNCTION и DROP PROCEDURE.
Примечания #
Правила поиска, реализуемые командой DROP ROUTINE, по сути не отличаются от правил DROP PROCEDURE; в частности, DROP ROUTINE таким же образом по возможности рассматривает список аргументов без маркеров режим_аргумента как соответствующий определению стандарта SQL, в котором аргументы OUT включаются в этот список. (DROP AGGREGATE и DROP FUNCTION действуют по-другому.)
В некоторых случаях, когда одно имя дано нескольким подпрограммам разных видов, команда DROP ROUTINE может не справиться с неоднозначностью, тогда как более конкретная команда (DROP FUNCTION и т. п.) могла бы выполнить удаление. Решить эту проблему можно, уточнив список аргументов.
Эти правила поиска также применяются в других командах, работающих с существующими подпрограммами, например ALTER ROUTINE и COMMENT ON ROUTINE.
Примеры #
Удаление подпрограммы foo для типа integer:
DROP ROUTINE foo(integer);
Эта команда будет работать независимо от того, является ли foo агрегатом, функцией или процедурой.
Совместимость #
Эта команда соответствует стандарту SQL, но дополнена следующими расширениями Postgres Pro:
Стандарт позволяет удалять с помощью этой команды только одну подпрограмму.
Указание
IF EXISTSявляется расширением.Возможность указывать режимы и имена аргументов является расширением, а правила поиска при указании режимов могут меняться.
Поддержка пользовательских агрегатных функций относится к расширениям.
См. также
DROP AGGREGATE, DROP FUNCTION, DROP PROCEDURE, ALTER ROUTINEЗаметьте, что также отсутствует команда CREATE ROUTINE.
DROP ROUTINE
DROP ROUTINE — remove a routine
Synopsis
DROP ROUTINE [ IF EXISTS ]name[ ( [ [argmode] [argname]argtype[, ...] ] ) ] [, ...] [ CASCADE | RESTRICT ]
Description
DROP ROUTINE removes the definition of one or more existing routines. The term “routine” includes aggregate functions, normal functions, and procedures. See under DROP AGGREGATE, DROP FUNCTION, and DROP PROCEDURE for the description of the parameters, more examples, and further details.
Notes #
The lookup rules used by DROP ROUTINE are fundamentally the same as for DROP PROCEDURE; in particular, DROP ROUTINE shares that command's behavior of considering an argument list that has no argmode markers to be possibly using the SQL standard's definition that OUT arguments are included in the list. (DROP AGGREGATE and DROP FUNCTION do not do that.)
In some cases where the same name is shared by routines of different kinds, it is possible for DROP ROUTINE to fail with an ambiguity error when a more specific command (DROP FUNCTION, etc.) would work. Specifying the argument type list more carefully will also resolve such problems.
These lookup rules are also used by other commands that act on existing routines, such as ALTER ROUTINE and COMMENT ON ROUTINE.
Examples #
To drop the routine foo for type integer:
DROP ROUTINE foo(integer);
This command will work independent of whether foo is an aggregate, function, or procedure.
Compatibility #
This command conforms to the SQL standard, with these Postgres Pro extensions:
The standard only allows one routine to be dropped per command.
The
IF EXISTSoption is an extension.The ability to specify argument modes and names is an extension, and the lookup rules differ when modes are given.
User-definable aggregate functions are an extension.
See Also
DROP AGGREGATE, DROP FUNCTION, DROP PROCEDURE, ALTER ROUTINE Note that there is no CREATE ROUTINE command.