我是靠谱客的博主 无奈水壶,最近开发中收集的这篇文章主要介绍oracle 触发器 for each row 理解,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

看到了触发器 中有个 for each row 不是很明白就查了查资料,因为只是简单研究,就先写总结一下。

触发器的一般语法:

CREATE [OR REPLACE] TIGGER 触发器名 触发时间 触发事件

ON 表名

[FOR EACH ROW]

BEGIN

PL/SQL 语句;

END;

CREATE [OR REPLACE] TRIGGER trigger_name
{BEFORE | AFTER }
{INSERT | DELETE | UPDATE [OF column [, column …]]}
[OR {INSERT | DELETE | UPDATE [OF column [, column …]]}...]
ON [schema.]table_name | [schema.]view_name 
[REFERENCING {OLD [AS] old | NEW [AS] new| PARENT as parent}]
[FOR EACH ROW ]
[WHEN condition]
PL/SQL_BLOCK | CALL procedure_name;


for each row 的意思是:这个触发器是行触发器。


行触发器和语句触发器的区别:

1、行触发器要求当一个DML语句操作影响数据库中的多行数据时,对于其中的每个数据行,只要它们符合触发约束条件,均激活一次触发器

2、语句触发器将整个语句操作作为触发事件,当它符合约束条件时,激活一次触发器

3、当省略FOR EACH ROW 选项时,BEFORE 和AFTER 触发器为语句触发器,而INSTEAD OF 触发器则只能为行触发器


例子:

--限制更新操作

create or replace TRIGGER L_TEST_TRI

BEFORE UPDATE OF YEAR ON L_TEST

FOR EACH ROW

DECLARE

BEGIN

IF :NEW.YEAR<:OLD.YEAR THEN

RAISE_APPLICATION_ERROR(-20002,'更新后的年份比更新前小');

END IF;

END;

--在非规定事件内插入数据

create or replace TRIGGER L_TEST_TRI

BEFORE INSERT ON L_TEST

DECLARE

BEGIN

IF TO_CHAR(SYSDATE,'DAY') IN ('星期四','星期六','星期日')

OR TO_NUMBER(TO_CHAR(SYSDATE,'HH24')) NOT BETWEEN 8 AND 24 THEN

RAISE_APPLICATION_ERROR(-20000, '不能在规定事件之外插入数据');

END IF;

END;


最后

以上就是无奈水壶为你收集整理的oracle 触发器 for each row 理解的全部内容,希望文章能够帮你解决oracle 触发器 for each row 理解所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(46)

评论列表共有 0 条评论

立即
投稿
返回
顶部