金仓数据库 KingbaseES SQL 语言参考手册 (17. SQL语句: DISCARD 到 DROP LANGUAGE)

17. SQL语句: DISCARD 到 DROP LANGUAGE

本章包含以下SQL语句:

17.1. DISCARD

用途

DISCARD — 抛弃会话状态

DISCARD释放与一个数据库会话相关的内部资源。这个命令有助于部分或者完全重置该会话的状态。有几个子命令来释放不同类型的资源。DISCARD ALL变体把所有其他形式都包含在内,并且还会重置额外的状态。

前置条件

语法

DISCARD { ALL | PLANS | SEQUENCES | TEMPORARY | TEMP }

语义

PLANS

释放所有已缓存的查询计划,强制在下一次使用相关预备语句时重新做计划。

SEQUENCES

丢弃所有已缓存的序列相关的状态,包括``currval()``/lastval()信息以及任何还未被nextval()返回的预分配的序列值(预分配序列值的描述请见 CREATE SEQUENCE );

TEMPORARY or TEMP

删除当前会话中创建的所有临时表。

ALL

释放与当前会话相关的所有临时资源并且把会话重置为初始状态。当前这和执行以下语句序列的效果相同:

CLOSE ALL;
SET SESSION AUTHORIZATION DEFAULT;
RESET ALL;
DEALLOCATE ALL;
UNLISTEN *;
SELECT sys_advisory_unlock_all();
DISCARD PLANS;
DISCARD TEMP;
DISCARD SEQUENCES;

示例

DISCARD SEQUENCES;

兼容性

DISCARD是一种 KingbaseES扩展。

其他

DISCARD ALL不能在事务块内执行。

17.2. DO

用途

DO — 执行一个匿名代码块

DO执行一个匿名代码块,或者换句话说执行一个以一种过程语言编写的瞬时匿名函数。

代码块就好像是一个没有参数并且返回void的函数的函数体。它会被在一次时间内解析并且执行。

可选的LANGUAGE子句可以卸载代码块之前或者之后。

前置条件

要使用的过程语言必须已经用CREATE LANGUAGE安装在当前数据库中。默认已经安装了plsql,但是其他语言没有被安装。

用户必须拥有该过程语言的USAGE特权,如果该语言是不可信的则必须是一个超级用户。这和创建一个该语言的函数对特权的要求相同。

语法

DO [ LANGUAGE lang_name ] code

语义

code

要被执行的过程语言代码。就像在``CREATE FUNCTION``中一样,必须把它指定为一个字符串。推荐使用一个美元引用的文本。

lang_name

编写该代码的过程语言的名称。如果省略,默认为plsql

示例

把模式public中所有视图上的所有特权授予给角色webuser

DO $$DECLARE r record;
BEGIN
        FOR r IN SELECT table_schema, table_name FROM information_schema.tables
                        WHERE table_type = 'VIEW' AND table_schema = 'public'
        LOOP
                EXECUTE 'GRANT ALL ON ' || quote_ident(r.table_schema) || '.' ||
                quote_ident(r.table_name) || ' TO webuser';
        END LOOP;
END$$;

兼容性

SQL 标准中没有DO语句。

17.3. DROP ACCESS METHOD

用途

DROP ACCESS METHOD — 移除一种访问方法

DROP ACCESS METHOD移除一种现有的访问方法。

前置条件

只有超级用户能够删除访问方法。

语法

DROP ACCESS METHOD [ IF EXISTS ] name [ CASCADE | RESTRICT ]

语义

IF EXISTS

如果该访问方法不存在,则不会抛出错误。这种情况下会发出一个提示。

name

一种现有的访问方法的名称。

CASCADE

自动删除依赖于该访问方法的对象(例如操作符类、操作符族以及索引),并且接着删除所有依赖于那些对象的对象(见 依赖跟踪 )。

RESTRICT

如果有任何对象依赖于该访问方法,则拒绝删除它。这是默认设置。

示例

删除访问方法heptree

DROP ACCESS METHOD heptree;

兼容性

DROP ACCESS METHOD是一种KingbaseES扩展。

17.4. DROP AGGREGATE

用途

DROP AGGREGATE — 移除一个聚集函数

DROP AGGREGATE移除一个现有的聚集函数。

前置条件

要执行这个命令,当前用户必须是该聚集函数的拥有者。

语法

DROP AGGREGATE [ IF EXISTS ] name ( aggregate_signature ) [, ...] [ CASCADE | RESTRICT ]

这里aggregate_signature是:

* |
[ argmode ] [ argname ] argtype [ , ... ] |
[ [ argmode ] [ argname ] argtype [ , ... ] ] ORDER BY [ argmode ] [ argname ] argtype [ , ... ]

语义

IF EXISTS

如果该聚集不存在则不要抛出一个错误,而是发出一个提示。

name

一个现有聚集函数的名称(可以是模式限定的)。

argmode

一个参数的模式:INVARIADIC。如果被忽略,默认值是IN

argname

一个参数的名称。注意``DROP AGGREGATE``并不真正关心参数名称,因为决定聚集函数的身份时只需要参数数据类型。

argtype

该聚集函数所操作的一个输入数据类型。要引用一个零参数的聚集函数,写``*``来替代参数说明列表。要引用一个有序集聚集函数,在直接和聚集参数说明之间写上ORDER BY

CASCADE

自动删除依赖于该聚集函数的对象(例如使用它的视图),然后删除所有依赖于那些对象的对象(见 依赖跟踪 )。

RESTRICT

如果有任何对象依赖于该聚集函数,则拒绝删除它。这是默认值。

示例

要为类型integer移除聚集函数myavg

DROP AGGREGATE myavg(integer);

要移除假想集聚集函数myrank,该函数接收一个排序列的任意列表和直接参数的一个匹配的列表:

DROP AGGREGATE myrank(VARIADIC "any" ORDER BY VARIADIC "any");

要在一个命令中删除多个聚合函数:

DROP AGGREGATE myavg(integer), myavg(bigint);

兼容性

在 SQL 标准中没有DROP AGGREGATE语句。

其他

ALTER AGGREGATE 下描述了另一种引用有序集聚集的语法。

17.5. DROP CAST

用途

DROP CAST — 移除一个造型

DROP CAST移除一个之前定义好的造型。

前置条件

要能删除一个造型,你必须拥有源数据类型或目标数据类型。这也是创建一个造型所要求的特权。

语法

DROP CAST [ IF EXISTS ] (source_type AS target_type) [ CASCADE | RESTRICT ]

语义

IF EXISTS

如果该造型不存在则不要抛出一个错误,而是发出一个提示。

source_type

该造型的源数据类型的名称。

target_type

该造型的目标数据类型的名称。

CASCADE

这个关键词没有任何效果,因为在造型上没有依赖性。

RESTRICT

这个关键词没有任何效果,因为在造型上没有依赖性。

示例

要移除从类型text到类型int的造型:

DROP CAST (text AS int);

兼容性

DROP CAST命令符合 SQL 标准。

17.6. DROP COLLATION

用途

DROP COLLATION — 移除一个排序规则

DROP COLLATION移除一个之前定义好的排序规则。

前置条件

要能删除一个排序规则,你必须拥有它。

语法

DROP COLLATION [ IF EXISTS ] name [ CASCADE | RESTRICT ]

语义

IF EXISTS

如果该排序规则不存在则不要抛出一个错误,而是发出一个提示。

name

排序规则的名称。排序规则名称可以是模式限定的。

CASCADE

自动删除依赖于该排序规则的对象,然后删除所有依赖于那些对象的对象(见 依赖跟踪 )。

RESTRICT

如果有任何对象依赖于该排序规则,则拒绝删除它。这是默认值。

示例

要删除名为german的排序规则:

DROP COLLATION german;

兼容性

除了IF EXISTS选项之外, DROP COLLATION命令符合SQL标准。该选项是一个 KingbaseES扩展。

17.7. DROP CONTEXT

用途

DROP CONTEXT删除context(userenv不可以删除)。该信息将从pg_context表中删除。

删除context不会使该context下设置的key-value失效。但是,当用户下次尝试设置该context时,该context将无效。即其删除的是字典对象,实例对象并不会删除。

前置条件

具有对象的删除权限。

语法

DROP CONTEXT namespace

语义

namespace

指定要删除的context名称。不能删除内置上下文userenv。

示例

要删除名字为context_test的context:

drop context context_test;

17.8. DROP CONVERSION

用途

DROP CONVERSION — 移除一个转换

DROP CONVERSION移除一个之前定义好的转换。

前置条件

要能删除一个转换,你必须拥有该转换。

语法

DROP CONVERSION [ IF EXISTS ] name [ CASCADE | RESTRICT ]

语义

IF EXISTS

如果该转换不存在则不要抛出一个错误,而是发出一个提示。

name

转换的名称。转换名称可以是模式限定的。

CASCADE

这个关键词没有任何效果,因为在转换上没有依赖性。

RESTRICT

这个关键词没有任何效果,因为在转换上没有依赖性。

示例

要删除名为myname的转换:

DROP CONVERSION myname;

兼容性

在 SQL 标准中没有DROP CONVERSION语句,但是有一个DROP TRANSLATION语句。还有对应的CREATE TRANSLATION语句,它与 KingbaseES中的CREATE CONVERSION 句相似。

17.9. DROP DATABASE

用途

DROP DATABASE移除一个数据库。它会 移除该数据库的系统目录项并且删除包含数据的文件目录。它只能由数据库 拥有者执行。还有,当你或者任何其他人已经连接到目标数据库时,它不能 被执行(连接到kingbase或者任何其他数据库来发出这 个命令)。

DROP DATABASE不能被撤销。请小心使用!

前置条件

你必须拥有该数据库以使用 DROP DATABASE 。

语法

DROP DATABASE [ IF EXISTS ] name

语义

IF EXISTS

如果该数据库不存在则不要抛出一个错误,而是发出一个提示。

name

要移除的数据库的名称。

示例

删除数据库mydatabase

DROP DATABASE mydatabase;

兼容性

SQL 标准中没有DROP DATABASE语句。

其他

DROP DATABASE不能在一个事务块内执行。

在连接到目标数据库时,这个命令不能被执行。因此,使用程序 dropdb 会更方便,它是这个命令的一个包装器。

17.10. DROP DATABASE LINK

用途

DROP DATABASE LINK移除一个database link。 database link可以被拥有者和DBA删除,删除database link对象之后,所有的用户会话中的对象都会被清除。

如果database link正在被其他用户使用,则无法删除此database link。

暂不支持PUBLIC关键字。

前置条件

要执行这个命令必须拥有该database link的权限。

语法

DROP DATABASE LINK dblink_name

语义

dblink_name

要删除的DATABASE LINK名,可以包含模式名。

示例

删除mydblink

DROP DATABASE LINK mydblink;

17.11. DROP DIRECTORY

用途

DROP DIRECTORY移除一个目录。

前置条件

只有superuser可以移除目录。

语法

DROP DIRECTORY [ IF EXISTS ] (public.)dir_name

语义

IF EXISTS

如果该目录不存在则不要抛出一个错误,而是发出一个提示。

dir_name

一个现有目录的名称(默认为public模式,可以指定为public模式,指定其他模式报错)。

示例

要移除目录:

DROP DIRECTORY dir_name;

兼容性

除了IF EXISTS选项,这个命令符合 SQL 标准。该选项是一个KingbaseES扩展。

17.12. DROP DOMAIN

用途

DROP DOMAIN — 移除一个域

DROP DOMAIN移除一个域。

前置条件

只有域的拥有者 才能移除它。

语法

DROP DOMAIN [ IF EXISTS ] name [, ...] [ CASCADE | RESTRICT ]

语义

IF EXISTS

如果该域不存在则不要抛出一个错误,而是发出一个提示。

name

一个现有域的名称(可以是模式限定的)。

CASCADE

自动删除依赖于该域的对象(例如表列),然后删除所有依赖于那些对象的对象(见 依赖跟踪 )。

RESTRICT

如果有任何对象依赖于该域,则拒绝删除它。这是默认值。

示例

要移除域box

DROP DOMAIN box;

兼容性

除了IF EXISTS选项,这个命令符合 SQL 标准。该选项是一个KingbaseES扩展。

17.13. DROP EVENT TRIGGER

用途

DROP EVENT TRIGGER — 移除一个事件触发器

前置条件

要执行这个命令,当前用户必须是事件触发器的拥有者。

语法

DROP EVENT TRIGGER [ IF EXISTS ] name [ CASCADE | RESTRICT ]

语义

IF EXISTS

如果该事件触发器不存在则不要抛出一个错误,而是发出一个提示。

name

要移除的事件触发器的名称。

CASCADE

自动删除依赖于该触发器的对象,然后删除所有依赖于那些对象的对象(见 依赖跟踪 )。

RESTRICT

如果有任何对象依赖于该触发器,则拒绝删除它。这是默认值。

示例

销毁触发器snitch

DROP EVENT TRIGGER snitch;

兼容性

在 SQL 标准中没有DROP EVENT TRIGGER语句。

17.14. DROP EXTENSION

用途

DROP EXTENSION — 移除一个扩展

DROP EXTENSION从数据库移除扩展。删除一个扩展会导致其组成对象也被删除。

前置条件

你必须拥有该扩展才能使用DROP EXTENSION

语法

END [ WORK | TRANSACTION ] [ AND [ NO ] CHAIN ]

语义

IF EXISTS

如果该扩展不存在则不要抛出一个错误,而是发出一个提示。

name

一个已安装扩展的名称。

CASCADE

自动删除依赖于该扩展的对象,然后删除所有依赖于那些对象的对象(见 依赖跟踪 )。

RESTRICT

如果有任何对象依赖于该扩展(而不是它自己拥有的成员对象和其他被列在同一个DROP命令中的扩展),则拒绝删除它。这是默认值。

示例

要从当前数据库移除扩展hstore

DROP EXTENSION hstore;

如果hstore的任何对象在该数据库库中正在使用,例如有一个表的列是hstore类型,这个命令都将会失败。加上CASCADE选项可以强制把这些依赖对象也移除。

兼容性

DROP EXTENSION是一个 KingbaseES扩展。

17.15. DROP FOREIGN DATA WRAPPER

用途

DROP FOREIGN DATA WRAPPER — 移除一个外部数据包装器

DROP FOREIGN DATA WRAPPER移除一个已有的外部数据包装器。

前置条件

要执行这个命令,当前用户必须是该外部数据包装器的拥有者。

语法

DROP FOREIGN DATA WRAPPER [ IF EXISTS ] name [, ...] [ CASCADE | RESTRICT ]

语义

IF EXISTS

如果该外部数据包装器不存在则不要抛出一个错误,而是发出一个提示。

name

一个现有外部数据包装器的名称。

CASCADE

自动删除依赖于该外部数据包装器的对象(例如服务器),然后删除所有依赖于那些对象的对象(见 依赖跟踪 )。

RESTRICT

如果有任何对象依赖于该外部数据包装器,则拒绝删除它。这是默认值。

示例

删除外部数据包装器dbi

DROP FOREIGN DATA WRAPPER dbi;

兼容性

DROP FOREIGN DATA WRAPPER 符合 ISO/IEC 9075-9 (SQL/MED)。IF EXISTS子句 是一个KingbaseES扩展。

17.16. DROP FOREIGN TABLE

用途

DROP FOREIGN TABLE — 移除一个外部表

DROP FOREIGN TABLE移除一个外部表。

前置条件

只有一个外部表的拥有者才能移除它。

语法

DROP FOREIGN TABLE [ IF EXISTS ] name [, ...] [ CASCADE | RESTRICT ]

语义

IF EXISTS

如果该外部表不存在则不要抛出一个错误,而是发出一个提示。

name

要删除的外部表的名称(可以是模式限定的)。

CASCADE

自动删除依赖于该外部表的对象(例如视图),然后删除所有依赖于那些对象的对象(见 依赖跟踪 )。

RESTRICT

如果有任何对象依赖于该外部表,则拒绝删除它。这是默认值。

示例

要销毁两个外部表films 和distributors

DROP FOREIGN TABLE films, distributors;

兼容性

这个命令符合 ISO/IEC 9075-9 (SQL/MED),不过该标准只允许每个命令中删除一个外部表并且没有IF EXISTS选项。该选项是一个 KingbaseES扩展。

17.17. DROP FUNCTION

用途

DROP FUNCTION移除一个已有函数的定义。该函数的参数类型必须被指定,因为多个不同的函数可能会具有相同的函数名和不同的参数列表。

前置条件

要执行这个命令用户必须是该函数的拥有者。

语法

DROP FUNCTION [ IF EXISTS ] name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ] [, ...] [ CASCADE | RESTRICT ]

语义

IF EXISTS

如果该函数不存在则不要抛出一个错误,而是发出一个提示。

name

一个现有函数的名称(可以是模式限定的)。 如果未指定参数列表,则该名称在其模式中必须是唯一的。

argmode

一个参数的模式:INOUT、 INOUT或者VARIADIC。如果被忽略, 则默认为IN。注意 DROP FUNCTION并不真正关心 OUT参数,因为决定函数的身份时只需要输入参数。 因此列出ININOUT和 VARIADIC参数足以。

argname

一个参数的名称。注意 DROP FUNCTION并不真正关心参数名称,因为决定函数的身份时只需要参数的数据类型。

argtype

如果函数有参数,这是函数参数的数据类型(可以是模式限定的)。

CASCADE

自动删除依赖于该函数的对象(例如操作符和触发器),然后删除所有依赖于那些对象的对象(见 依赖跟踪 )。

RESTRICT

如果有任何对象依赖于该函数,则拒绝删除它。这是默认值。

示例

这个命令移除平方根函数:

DROP FUNCTION sqrt(integer);

在一个命令中删除多个函数:

DROP FUNCTION sqrt(integer), sqrt(bigint);

如果函数名称在其模式中是唯一的,则可以在不带参数列表的情况下引用它:

DROP FUNCTION update_employee_salaries;

请注意,这与

DROP FUNCTION update_employee_salaries();

不同,后者引用一个零个参数的函数,而第一个变体才可以引用具有任意数量参数的函数,包括零,只要该名称是唯一的。

兼容性

该命令符合SQL标准,使用这些KingbaseES扩展:

  • 该标准只允许每个命令删除一个函数。

  • IF EXISTS选项

  • 能够指定参数模式和名称

17.18. DROP GROUP

用途

DROP GROUP — 移除一个数据库角色

DROP GROUP现在是 DROP ROLE 的一个别名。

前置条件

参见 DROP ROLE

语法

DROP GROUP [ IF EXISTS ] name [, ...]

语义

IF EXISTS

如果该角色不存在则不要抛出一个错误,而是发出一个提示。

name

要移除的角色的名称。

示例

DROP GROUP regress_priv_group1;

兼容性

在 SQL 标准中没有DROP GROUP语句。

17.19. DROP INDEX

用途

DROP INDEX从数据库系统中移除一个已有的索引。

前置条件

要执行这个命令你必须是该索引的拥有者。

语法

DROP INDEX [ CONCURRENTLY ] [ IF EXISTS ] name [, ...] [ CASCADE | RESTRICT ]

语义

CONCURRENTLY

删除索引并且不阻塞在索引基表上的并发选择、插入、更新和删除操作。一个 普通的DROP INDEX会要求该表上的排他锁,这样会阻塞 其他访问直至索引删除完成。通过这个选项,该命令会等待直至冲突事务完成。

在使用这个选项时有一些需要注意的事情。只能指定一个索引名称,并且不支 持CASCADE选项(因此,一个支持UNIQUE或者 PRIMARY KEY约束的索引不能以这种方式删除)。还有,常规 的DROP INDEX命令可以在一个事务块内执行,而 DROP INDEX CONCURRENTLY不能。

IF EXISTS

如果该索引不存在则不要抛出一个错误,而是发出一个提示。

name

要移除的索引的名称(可以是模式限定的)。

CASCADE

自动删除依赖于该索引的对象,然后删除所有依赖于那些对象的对象(见 依赖跟踪 )。

RESTRICT

如果有任何对象依赖于该索引,则拒绝删除它。这是默认值。

示例

这个命令将移除索引title_idx

DROP INDEX title_idx;

兼容性

DROP INDEX是一个 KingbaseES语言扩展。在 SQL 标准中没有关于索引的规定。

17.20. DROP LANGUAGE

用途

DROP LANGUAGE — 移除一个过程语言

DROP LANGUAGE移除一个之前注册的过程语言的定义。

前置条件

你必须是一个超级用户或者该语言的拥有者才能使用``DROP LANGUAGE``。

语法

DROP [ PROCEDURAL ] LANGUAGE [ IF EXISTS ] name [ CASCADE | RESTRICT ]

语义

IF EXISTS

如果该语言不存在则不要抛出一个错误,而是发出一个提示。

name

一个已有过程语言的名称。为了向前兼容,这个名称可以用单引号包围。

CASCADE

自动删除依赖于该语言的对象(例如该语言中的函数),然后删除所有依赖于那些对象的对象(见 依赖跟踪 )。

RESTRICT

如果有任何对象依赖于该语言,则拒绝删除它。这是默认值。

示例

这个命令移除过程语言plsample

DROP LANGUAGE plsample;

兼容性

在 SQL 标准中没有DROP LANGUAGE语句。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值