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 版之前,应用程序开发人员使用辅助包对公共状态进行建模。当触发语句导致错误而后语句触发器没有触发时,这种方法既麻烦又容易导致内存泄漏。复合触发器使您可以更轻松地编写一种方法,在这种方法中,您希望为各种时间点实施的操作共享公共数据。
我想编写触发器以验证列是否只有特定值,并且如果某些用户尝试更新或插入具有相同值的行,则引发触发器。但是触发器不能正常编译。你有什么主意吗?您知道 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 版之前,应用程序开发人员使用辅助包对公共状态进行建模。当触发语句导致错误而后语句触发器没有触发时,这种方法既麻烦又容易导致内存泄漏。复合触发器使您可以更轻松地编写一种方法,在这种方法中,您希望为各种时间点实施的操作共享公共数据。