南大通用GBase8s 常用SQL语句(125)

    1. DROP OPCLASS 语句

使用 DROP OPCLASS 语句从数据库中删除现有的运算符类。

该语句是 SQL ANSI/ISO 标准的扩展。

语法

 

元素

描述

限制

语法

opclass

要删除的运算符类的名称

必须已经由先前的 CREATE OPCLASS 语句创建

标识符

owner

opclass 所有者的名称

必须拥有此运算符类

所有者名称

用法

您必须是运算符类的所有者或拥有 DBA 特权才可使用 DROP OPCLASS 语句。

如果您包含可选的 IF EXISTS 关键字,则如果指定名称的运算符类已经在当前数据库中注册,则数据库服务器不采取任何操作(而不是向应用程序发送异常)。

如果数据库包含已在您计划要删除的运算符类上定义的索引,则 RESTRICT 关键字会导致 DROP OPCLASS 失败。因此,在删除运算符类之前,必须使用 DROP INDEX 语句来删除任何从属的索引。

以下 DROP OPCLASS 语句删除了一个称为 abs_btree_ops 的运算符类:

DROP OPCLASS abs_btree_ops RESTRICT

如果您包含可选的 IF EXISTS 关键字,则如果没有指定名称(或者如果您包含SPECIFIC 关键字,为指定的特定名称)的函数在当前数据库中注册,则数据库服务器不采取任何操作(而不是向应用程序发送异常)。

    1. DROP PROCEDURE 语句

使用 DROP PROCEDURE 语句从数据库中删除用户定义的过程。该语句是 SQL ANSI/ISO 标准的扩展。

语法

 

元素

描述

限制

语法

function 

要删除的过程或 SPL 函数的名称

必须在数据库中存在(即已注册)

标识符 

owner 

UDR 所有者的名称

必须拥有过程或 SPL 函数

所有者名称 

parameter _type 

参数的数据类型

数据类型(或数据类型列表)必须和那些在创建过程中就已指定的数据类型是相同的数据类型(并且具有相同的顺序)

标识符; 数据类型

procedure 

要删除的用户定义的过程名称

必须在数据库中存在(即已注册)

数据库对象名 

用法

删除用户定义的过程会除去该过程的文本和可执行的版本。您无法在同一个 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 语句。

对于较早的 GBase 8s 版本的向后兼容性,可以使用此语句来删除由 CREATE PROCEDURE 语句创建的 SPL 函数。您可以在过程名称的后面包括参数数据类型,以识别过程:

DROP PROCEDURE compare(int, int);

如果对用户定义的过程使用了指定的名称,还必须用关键字 SPECIFIC,如下例所示:

DROP SPECIFIC PROCEDURE compare_point;

如果您包含了可选的 IF EXISTS 关键字,则如果没有指定名称的过程在当前数据库中注册,则数据库服务器不采取任何操作(而不是向应用程序发送错误)。

确定过程是否存在

在您尝试删除用户定义的过程之前,可以通过查询系统目录来检查此过程是否在数据库中存在。以下示例中,SELECT 语句从 sysprodures 表中检索标识为 MyProcedure 的任何过程:

SELECT * FROM sysprocedures WHERE procname = MyProcedure;

如果此查询返回一行,则名为 MyProcedure 的 UDR 注册在当前数据库中。

如果没有返回行,则您无需发出 DROP PROCEDURE 语句,但是您可能希望验证 WHERE 子句指定的名称是否正确,以及您是否连接到正确的数据库。

如果此查询返回多行,则在当前数据库中重载过程 MyProcedure ,并且您需要检查 MyProcedure 过程的属性以确定它们中的哪些(如果有)需要通过 DROP PROCEDURE 语句注销。

删除外部过程

以 C 语言或 Java™ 语句编写用户定义的过程(UDP)称为外部例程。外部例程必须包含指定共享对象文件名的外部例程引用子句。在缺省情况下,只有 DBSA 授予了内置的 EXTEND 角色的用户可以创建或删除外部例程。您还必须具有编写此 UDR 的外部程序语言的 Usage 特权。有关 EXTEND 角色安全功能的其它信息请参阅 授予 EXTEND 角色。 有关 C 语言或 Java 语言的 USAGE ON LANGUAGE 子句的语法使用,请参阅 语言级权限 。

要从共享内存中删除 C 语言例程的可执行版本,请调用 IFX_UNLOAD_MODULE 函数。要用另一个例程替换可执行版本的 C 例程,请调用 IFX_REPLACE_MODULE 函数。这些内置函数都在 UDR 定义例程中有所描述。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值