使用 DROP PROCEDURE 语句从数据库中删除用户定义的过程。该语句是 SQL ANSI/ISO 标准的扩展。
删除用户定义的过程会除去该过程的文本和可执行的版本。您无法在同一个 SPL 过程内删除 SPL 过程。
不能使用 DROP ROUTINE 、DROP FUNCTION 或 DROP PROCEDURE 语句删除受保护的例程。有关受保护的例程的更多信息,请参阅 GBase 8s SQL 参考指南 中 sysprocedures 系统目录表的描述。
要使用 DROP PROCEDURE 语句,您必须是过程的所有者并且还必须具有数据库的 Resource 权限或 DBA 权限。您必须还需具有编写此 UDR 所使用的程序语言的 Usage 权限。要删除一个外部用户定义的过程,另见 删除外部过程。
如果 function 或 procedure 名称在数据库中不是唯一的,则您必须指定足够的 parameter_type 信息以区分这些名称。如果数据库服务器无法解析一个意义含糊的 UDR 名称,即它的签名与另一个 UDR 的签名只是在一个未命名的 ROW 类型参数中不同,则返回一个错误。(当定义了含义模糊的 function 或 procedure 时,数据库服务器不能预期此错误。)
如果不知道 UDR 是用户定义的过程还是用户定义的函数,您可以使用 DROP ROUTINE 语句。有关更多信息,请参阅 DROP ROUTINE 语句。
DROP PROCEDURE compare(int, int);
DROP SPECIFIC PROCEDURE compare_point;
如果您包含了可选的 IF EXISTS 关键字,则如果没有指定名称的过程在当前数据库中注册,则数据库服务器不采取任何操作(而不是向应用程序发送错误)。
SELECT * FROM sysprocedures WHERE procname = MyProcedure;如果此查询返回一行,则名为 MyProcedure 的 UDR 注册在当前数据库中。
如果没有返回行,则您无需发出 DROP PROCEDURE 语句,但是您可能希望验证 WHERE 子句指定的名称是否正确,以及您是否连接到正确的数据库。
如果此查询返回多行,则在当前数据库中重载过程 MyProcedure ,并且您需要检查 MyProcedure 过程的属性以确定它们中的哪些(如果有)需要通过 DROP PROCEDURE 语句注销。