南大通用GBase8s 常用SQL语句(128)
-
- DROP SEQUENCE 语句
使用 DROP SEQUENCE 语句从数据库中删除序列对象。
该语句是 SQL ANSI/ISO 标准的扩展。
语法
元素 | 描述 | 限制 | 语法 |
owner | 序列所有者的名称 | 必须拥有序列对象 | 所有者名称 |
sequence | 序列的名称 | 必须存在于当前数据库中 | 标识符 |
用法
此语句从 syssequences 系统目录表中删除 sequence 条目。要删除序列,您必须是它的所有者或拥有对数据库的 DBA 特权。在兼容 ANSI 的数据库中,如果您不是所有者,您必须拥有它的所有者的名(owner.sequence)。
如果您包含可选的 IF EXISTS 关键字,则如果未在当前数据库中注册指定名称的序列对象,则数据库服务器不执行任何操作(而不是向应用程序发送异常)。
如果删除一个序列。则该序列的名称的任何同义词也会由数据库服务器自动删除。
您不可以使用同义词指定 DROP SEQUENCE 语句中 sequence 的标识符。
示例
假设您使用以下语句创建一个序列:
CREATE SEQUENCE Invoice_Numbers
START 10000 INCREMENT 1 NOCYCLE ;
该序列可以由此语句删除:
DROP SEQUENCE Invoice_Numbers;
可以通过连接 syssequences 和 systables 系统目录表来查看现有序列的详细信息,如下例所示:
SELECT t.tabname SeqName
FROM Syssequences s, Systables t
WHERE t.tabid = s.tabid ;
-
- DROP SYNONYM 语句
使用 DROP SYNONYM 语句注销现有的同义词。
该语句是 SQL ANSI/ISO 标准的扩展。
语法
元素 | 描述 | 限制 | 语法 |
owner | synonym 的所有者 | 必须拥有 synonym | 所有者名称 |
synonym | 要删除的同义词 | 该同义词必须存在于当前数据库中 | 标识符 |
用法
此语句从 systables 、syssynonyms 和 syssyntable 系统目录表中删除条目。您必须是 synonym 的所有者或者拥有 DBA 特权才能执行 DROP SYNONYM 语句。删除同义词对同义词指向的表、视图或系列对象都没有影响。
如果您包含可选的 IF EXISTS 关键字,则如果未在当前数据库中注册指定名称的同义词则数据库服务器不执行任何操作(而不是向应用程序发送异常)。
下列语句删除用户 cathyg 拥有的同义词 nj_cust:
DROP SYNONYM cathyg.nj_cust;
DROP SYNONYM 并不是唯一一个可以注销同义词的 DDL 操作,如果删除表、视图或序列,则同一数据库中的任何同义词以及指代该表、视图或序列的同义词也会被删除。
但是,如果当前数据库中的同义词引用另一个数据库中的已删除表或视图,那么该同义词将保留在系统目录中,直至使用 DROP SYNONYM 语句显式删除该同义词。 您可以在同一数据库中创建另一个表或视图,并声明已删除的表或视图的名称作为其标识符。(如果不是当前数据库中的任何表或对象的名称,您可以在当前数据库中创建一个表、视图或序列对象,并将在其它数据库中的表中删除的表或视图的标识符声明为其名称。)在另一种情况中,旧的同义词现在会引用新的表对象。有关同义词链接的更完整的讨论,请参阅 CREATE SYNONYM 语句描述中的链接同义词一节。
-
- DROP TABLE 语句
使用 DROP TABLE 语句可删除表,以及与之关联的索引和数据。该语句是 SQL ANSI/ISO 标准的扩展。
语法
元素 | 描述 | 限制 | 语法 |
owner | 表所有者的名称 | 必须拥有表 | 所有者名称 |
synonym | 要删除的表的本地同义词 | 该同义词和表必须存在,USETABLENAME 必须设置为 1 | 标识符 |
table | 要删除的表的名称 | 必须在本地数据库的 systables 系统目录表中注册 | 标识符 |
用法
您必须是表的所有者或拥有 DBA 特权才能使用 DROP TABLE 语句。
如果您包含可选的 IF EXISTS 关键字,则如果未在当前数据库中注册指定名称的表,则数据库服务器不执行任何操作(而不是向应用程序发送异常)。
您无法删除系统目录表。
如果发出 DROP TABLE 语句,则 DB-Access 不会提示您验证是否想要删除整个表。
DROP TABLE 语句的效果
使用 DROP TABLE 语句要谨慎。当您删除一个表时,也会删除存储在其中的数据、索引或对列的约束(包括对该表的列的所有参考约束)、分配给该表的任何本地同义词、在该表上创建的任何触发器以及给予该表的任何授权。同时您也删除了基于该表的所有视图以及与该表相关联的任何违例和诊断表。
DROP TABLE 不会删除在外部数据库中创建的表的任何同义词。要删除以删除的表的外部的同义词,必须使用 DROP SYNONYM 语句显式地执行此操作。
您可以通过设置 USETABLENAME 环境变量来防止用户在 DROP TABLE 语句中指定同义词。如果设置了 USETABLENAME ,当前任何用户试图指定 DROP TABLE synonym 时将导致错误。
指定 CASCADE 方式
DROP TABLE 中的 CASCADE 关键字会删除相关的数据库对象,包括构建在表上的参考约束、定义在表上的视图以及与表相关联的任何违例和诊断表。
如果表在继承层次结构中是超级表,则 CASCADE 删除所有的子表和超级表。
CASCADE 方式是 DROP TABLE 语句的缺省方式。您也可以使用 CASCADE 关键字显式地指定此方式。
指定 RESTRICT 方式
RESTRICT 关键字可以控制对以下对象的删除操作:超级表、在该表上定义的视图、含有与表相关联的违例和诊断表。如果任何以下条件为真,则使用 RESTRICT 选项会引起删除操作失败并返回一条出错消息:
- 现有的参考约束引用 table 。
- 现有的视图定义在 table 上。
- 任何违例表或诊断表与 table 相关联。
- table 在继承层次结构中是超级表。
删除包含不透明数据类型的表
当删除一些不透明数据类型时,它们需要特别的处理过程。例如,如果某个不透明类型包含空间或多重表示数据,那么它可能提供如何存储数据的选项:存储于内部结构中或者(对于大对象)智能大对象中。
数据库服务器通过调用称为 destroy( ) 的用户定义的支持函数删除不透明类型。对行包含不透明类型的表执行 DROP TABLE 语句时,数据库服务器自动调用该类型的 destroy( ) 函数。在删除表之前,destroy( ) 函数可以对不透明数据类型的列执行某些确定的函数。有关 destroy( ) 支持函数的更多信息,请参阅 GBase 8s 用户定义的例程和数据类型开发者指南 。
无法删除的表
可以删除的表的类型是有限制的。
- 不能删除任何系统目录表。
- 无法删除不在当前数据库中的表。
- 不能删除违例表或诊断表。
在删除表之前,您必须先对违例表和诊断表所关联的基本表发出 STOP VIOLATIONS TABLE 语句。
以下示例删除了当前数据库中的两个表。它们都被当前用户 joed 拥有。且与违例表和诊断表都没有关联,表上也没有定义引用约束或视图。
DROP TABLE customer;
DROP TABLE stores_demo@accntg:joed.state;