返回首页

gbase数据、南大通用产品文档:GBase8s在本地的或远程的数据库中删除例程

更新日期:2024年09月11日

在您创建 SPL 例程之后,您不可更改该例程体。相反,您需要删除该例程并重新创建它。
然而,在您删除例程之前,请确保您在数据库之外的某个地方有它的文本的副本。
通常,
请使用带有 SPL 过程名称的 DROP PROCEDURE 和带有 SPL 函数名称的 DROP
FUNCTION,如下图所示。
图: DROP PROCEDURE 和 DROP FUNCTION。
DROP PROCEDURE raise_prices;
DROP FUNCTION read_address;
提示: 您还可使用带有函数名称的 DROP PROCEDURE 来删除 SPL 函数。然而,推荐您使
用仅带有过程名称的 DROP PROCEDURE,以及仅带有函数名称的 DROP FUNCTION。
如果数据库有同名称的其他例程
(重载的例程)

则您不可只通过它的例程名称来删除 SPL
例程。要删除已重载了的例程,您必须指定它的签名或它的特定的名称。下图展示您可能
删除重载了的例程的两种方式。

GBase 8s SQL 指南:教程
南大通用数据技术股份有限公司
- 274 -
图: 删除重载了的例程。
DROP FUNCTION calculate( a INT, b INT, c INT);
-- this is a signature

DROP SPECIFIC FUNCTION calc1;
-- this is a specific name
如果您不知道例程的类型(是函数还是过程),则您可使用 DROP ROUTINE 语句来删除
它。DROP ROUTINE 对函数或过程都有效。DROP ROUTINE 还有 SPECIFIC 关键字,
如下图所示。
图: DROP ROUTINE 语句。
DROP ROUTINE calculate;
DROP SPECIFIC ROUTINE calc1;
在您删除存储在远程数据库服务器上的 SPL 例程之前,
请注意下列限制。
仅当只用例程名
称而不需它的参数,就足以标识该例程时,您才可以
database@dbservername:owner.routinename 的形式使用完全限定的例程来删除 SPL 例程。
分布式操作中对数据类型的限制
如果 SPL 例程访问非本地的数据库服务器中的表,
或调用 SPL 例程作为另一数据库服务
器的数据库的 UDR,
则该例程仅可有非 opaque 内建的数据类型作为它们的参数或返回的
值。
然而,如果表或 UDR 驻留在同一 GBase 8s 示例的另一数据库上,则使用 SPL(或 GBase
8s 支持的外部语言)编写的例程的参数和返回的值可为内建的 opaque 数据类型 BLOB、
BOOLEAN、CLOB 和 LVARCHAR。如果下列条件为真,则它们还可为 UDT 或
DISTINCT 数据类型:

远程数据库与当前的数据库有相同的服务器。

将 UDT 参数显式地强制转型为内建的数据类型。

DISTINCT 类型是基于内建的类型的,且被显式地强制转型为内建的类型。

在所有参与的数据库中定义 SPL 例程和所有强制转型。

DELETE 从表中移除任何行或行的组合。在提交该事务之后,您不可恢复删除了的行。
(在 中断了的修改 之下讨论事务。现在,请将事务与语句看做是一回事。)
当删除一行时,您还必须小心地删除其值依赖于该删除了的行的其他表的任何行。如果数
据库强制执行引用约束,则您可使用 CREATE TABLE 或 ALTER TABLE 语句的 ON
DELETE CASCADE 选项来允许从与另一表的关系中的一个表进行级联删除。要获取关于
引用约束和 ON DELETE CASCADE 选项的更多信息,请参阅 引用完整性。

GBase 8s SQL 指南:教程
南大通用数据技术股份有限公司
- 160 -

如果希望移除对强制引用完整性的要求,则可删除外键约束。

在对象资源管理器中,依次展开“服务器”、“数据库”、“表”、“键”,右键点击需要
删除的外键,选择“删除”。

弹出删除确认对话框,点击“确定”之后即可删除。