Oracle 数据库快捷版 10g 中是否提供复合触发器?

Are Compound Triggers available in Oracle Database Express Edition 10g?

我想编写触发器以验证列是否只有特定值,并且如果某些用户尝试更新或插入具有相同值的行,则引发触发器。但是触发器不能正常编译。你有什么主意吗?您知道 Compound 触发器是否在 10g 中可用?

注意:只有一个 "S" 值可用于 mon_oficial 列。如果某些用户尝试插入新记录或更新第二个 "S" 值触发器将被触发。

Table:

触发器:

CREATE OR REPLACE TRIGGER check_mon_oficial_trg
FOR INSERT OR UPDATE
ON monedas
COMPOUND TRIGGER
  v_check_moneda NUMBER(8);
BEFORE STATEMENT IS
  BEGIN
    SELECT COUNT(:NEW.mon_oficial)
    INTO   v_check_moneda
    FROM   monedas
    WHERE  mon_oficial = 'S';

    IF
      v_check_moneda > 1 THEN
        RAISE_APPLICATION_ERROR(-20010, 'Only one official money in table');
    END IF;
  END BEFORE STATEMENT;
END check_mon_oficial_trg;

错误:

11gR1

中引入了复合触发器

复合触发器

复合触发器是一种数据库操作语言 (DML) 触发器,可以在多个时间点触发。

复合触发器的主体支持公共 PL/SQL 状态,其所有部分的代码都可以访问该状态。公共状态在触发语句开始时建立,在触发语句完成时销毁,即使触发语句导致错误。

在 11.1 版之前,应用程序开发人员使用辅助包对公共状态进行建模。当触发语句导致错误而后语句触发器没有触发时,这种方法既麻烦又容易导致内存泄漏。复合触发器使您可以更轻松地编写一种方法,在这种方法中,您希望为各种时间点实施的操作共享公共数据。