触发器上的限制

要在表上创建触发器(或在视图上创建 INSTEAD OF 触发器),您必须拥有表或视图,或具有 DBA 状态。关于触发器所有者特权和其它用户特权之间的关系,请参阅执行触发操作的特权

您创建触发器的表必须存在于当前数据库中。您不能在任一以下类型的表上创建触发器:

DB-Access 中,如果您想将触发器定义为模式的一部分,则请将 CREATE TRIGGER 语句放在 CREATE SCHEMA 语句中。

如果您正将 CREATE TRIGGER 语句嵌入到 GBase 8s ESQL/C 程序中,则您不能在触发器定义中使用主变量。

可以使用 DROP TRIGGER 语句移除现有的触发器。如果使用 DROP TABLE 或 DROP VIEW 语句来从数据库除去触发表或视图,则那些表或视图上的所有触发器也被删除。

当从触发器示例中或从触发器的 Action 子句或 Correlated Action 子句发出 SPL 的 ON EXCEPTION 语句时,该语句不会生效。

触发 BIGSERIAL 、 SERIAL 或 SERIAL8 列递增的 Insert 触发器的触发操作不会更改 SQL 通信区域结构的 sqlca.sqlerrd[1] 字段。该触发 INSERT 操作可以成功增加该列的序列计数,但是 sqlca.sqlerrd[1] 字段的值仍为零,而不会重置为新的序列值。

不能在指定了ON DELETE CASCADE 引用约束的表上定义 DELETE 触发器。

UNION 子查询不能是触发事件。如果一个有效的 UNION 子查询指定了 Select 触发器定义的列,该查询成功,但是会忽略此触发器(或者视图上的 INSTEAD OF 触发器)。

数据库服务器不会对一些触发器使用并行处理。对于与触发事件类型相对应的任何 DML 语句,PDQ 在 FOR EACH ROW 部分中自动禁用: 对 PDQ 的此限制的作用域是 FOR EACH ROW 部分。它在 Action 子句的 BEFORE 或 AFTER 部分中的 DML 语句没有作用。

有关视图上 INSTEAD OF 触发器其它限制,请参阅视图上 INSTEAD OF 触发器的限制