# 丢弃程序
DROP PROCEDURE — 删除一个过程
# 概要
DROP PROCEDURE [ IF EXISTS ] name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ] [, ...]
[ CASCADE | RESTRICT ]
# 描述
丢弃程序
删除一个或多个现有过程的定义。要执行此命令,用户必须是过程的所有者。通常必须指定过程的参数类型,因为可以存在多个具有相同名称和不同参数列表的不同过程。
# 参数
如果存在
如果过程不存在,不要抛出错误。在这种情况下发出通知。
姓名
现有过程的名称(可选模式限定)。
参数模式
参数的模式:在
,出去
,进出
, 或者杂音
.如果省略,则默认为在
(但见下文)。
参数名称
参数的名称。注意丢弃程序
实际上并不关注参数名称,因为只有参数数据类型用于确定过程的标识。
参数类型
过程参数的数据类型(可选模式限定),如果有的话。详情见下文。
级联
自动删除依赖于过程的对象,进而删除依赖于这些对象的所有对象(请参阅第 5.14 节)。
严格
如果有任何对象依赖于该过程,则拒绝放弃该过程。这是默认设置。
# 笔记
如果给定名称只有一个过程,则可以省略参数列表。在这种情况下也省略括号。
在 PostgreSQL 中,列出输入(包括进出
) 参数,因为不允许两个同名例程共享相同的输入参数列表。此外,降低
命令实际上不会检查您是否编写了出去
正确论证;所以任何明确标记的参数出去
只是噪音。但是为了与相应的一致性,建议编写它们创造
命令。
为了与 SQL 标准兼容,还允许编写所有参数数据类型(包括出去
论据)没有任何*参数模式
标记。完成后,程序的类型出去
论据将要根据命令进行验证。该规定产生了歧义,因为当参数列表不包含参数模式
*标记,不清楚是哪条规则。这降低
命令将尝试双向查找,如果找到两个不同的过程将抛出错误。为了避免这种模棱两可的风险,建议写在
显式标记而不是让它们被默认,从而强制使用传统的 PostgreSQL 解释。
刚才解释的查找规则也被其他作用于现有过程的命令使用,例如改变程序
和对程序的评论
.
# 例子
如果只有一个程序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 标准,具有以下 PostgreSQL 扩展:
该标准只允许每个命令删除一个过程。
这
如果存在
选项是一个扩展。指定参数模式和名称的能力是一种扩展,并且在给出模式时查找规则会有所不同。