GBASE南大通用数据库在本地的或远程的数据库中删除例程

发布时间:2024年01月24日

在您创建 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 例程。要删除已重载了的例程,您必须指定它的签名或它的特定的名称。下图展示您可能 删除重载了的例程的两种方式。

图: 删除重载了的例程。

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 例程和所有强制转型。

文章来源:https://blog.csdn.net/weixin_47390342/article/details/135823458
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。