Oracle的触发器是一种用于检查定义的条件或条件出现改变时自动执行的功能。它支持两种类型的触发器:行级触发器和表级触发器。
行级触发器检查某个表的行发生变化时会被触发,行级触发器可以在插入、更新、删除操作发生时执行。语法形式如下:
CREATE TRIGGER []
[BEFORE INSERT|UPDATE|DELETE]
ON
[FOR EACH ROW]
[]
BEGIN
[]
END;
例如:
CREATE TRIGGER tr_news_update
BEFORE UPDATE
ON news
FOR EACH ROW
DECLARE
days_per_month INTEGER;
BEGIN
SELECT COUNT(*) INTO days_per_month
FROM news
WHERE news.myDateCol>=:OLD.myDateCol
AND news.myDateCol
IF days_per_month>20 THEN
raise_application_error( -20999, ‘Cannot make more than 20 updates per month’);
END IF;
END;
表级触发器触发的时机是,在DML操作前或者后,语法形式如下:
CREATE TRIGGER []
[BEFORE|AFTER] [INSERT|UPDATE|DELETE]
ON
[REFERENCING ]
[FOR EACH ROW]
[]
BEGIN
[]
END;
例如:
CREATE TRIGGER tr_news_update
BEFORE UPDATE
ON news
REFRESHING OLD AS OLD FOR EACH ROW
DECLARE
days_per_month INTEGER;
BEGIN
SELECT COUNT(*) INTO days_per_month
FROM news
WHERE news.myDateCol>=OLD.myDateCol
AND news.myDateCol
IF days_per_month>20 THEN
raise_application_error( -20999, ‘Cannot make more than 20 updates per month’);
END IF;
END;
总体而言,Oracle的触发器是一种非常有用的工具,可以有效地提高数据库的性能和安全性,保护数据库的完整性和一致性。理解触发器的类型和语法可以帮助开发人员更好地利用Oracle提供的强大功能,使数据库更安全和可靠。