-
- STOP VIOLATIONS TABLE 语句
使用 STOP VIOLATIONS TABLE 语句来删除目标表、它的违反表与它的诊断表之间的关联。此语句是对 SQL 的 ANSI/ISO 标准的扩展。
语法
元素 | 描述 | 限制 | 语法 |
owner | table 的所有者 | 必须拥有该表 | 所有者名称 |
table | 与要删除的违反表和诊断表相关联的目标表的名称。不存在缺省值。 | 必须是与违反表和诊断表相关联的本地表 | 标识符 |
用法
STOP VIOLATIONS TABLE 语句删除目标表、违反表与诊断表之间的关联。在您发出此语句之后,以前的违反表和诊断表继续存在,但不再作为该目标表的违反表和诊断表。现在,它们有常规的数据库表的状态,而不是目标表的违反表和诊断表。您必须发出 DROP TABLE 语句来显式地删除这两个表。
当 DML 操作(INSERT、DELETE 或 UPDATE)对目标表的行造成数据完整性违反时,不再将不符合的行过滤到以前的违反表,且不将关于数据完整性违反的诊断信息放置到以前的诊断表中。
停止违反表和诊断表的示例
假设名为 cust_subset 的目标表与名为 cust_subset_vio 的违反表相关联,且与名为 cust_subset_dia 的诊断表相关联。要删除目标表与违反表和诊断表之间的关联,请输入下列语句:
STOP VIOLATIONS TABLE FOR cust_subset;
这删除已注册了以前的相关联的 sysviolations 系统目录表中的行。对在目标 cust_subset 表上的随后的 DML 操作将不再导致数据库服务器将关于不符合的行的信息插入到它以前的违反表和诊断表内。
删除违反表和诊断表的示例
在您在前面的示例中执行 STOP VIOLATIONS TABLE 语句之后,cust_subset_vio 和 cust_subset_dia 表继续存在,但不再与 cust_subset 表相关联。相反现在它们有常规的数据库表的状态。要删除这两个表,请输入下列语句:
DROP TABLE cust_subset_vio;
DROP TABLE cust_subset_dia;
如果您先前已经发出了的不带有 RESTRICT 关键字的 DROP TABLE 语句成功地删除 cust_subset 表,则上面的语句可能并不必要,因为以级联模式删除目标表会隐式地删除任何相关联的违反表和诊断表。
停止违反表所需要的权限
要为给定的目标表停止违反表或诊断表,您必须满足下列要求之一:
- 您在该数据库上必须有 DBA 权限。
- 您必须是目标表的所有者,且在数据库上有 Resource 权限。
- 您在目标表上必须有 Alter 权限,且在数据库上有 Resource 权限。