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 理解相关推荐
- mysql 触发器 for each row 理解_“for each row”如何在mysql中的触发器中工作?
FOR EACH ROW表示每个匹配行的更新或删除. 除非查询中有where条件,否则触发器主体不会遍历整个表数据. 下面演示了一个工作示例: 创建样本表: drop table if exists ...
- mysql 触发器 for each row 理解_MySQL触发器中的“ FOR EACH ROW”如何工作?
实际上," FOR EACH ROW"意味着每个匹配的行都将被更新或删除.换句话说,我们可以说触发器没有应用于每一行,它只是说要为每个受影响的表行执行触发器主体.我们可以通过以下示 ...
- SQL server与Oracle触发器的创建与使用
SQL Server 1创建触发器 GO BEGIN IF (object_id('WMY', 'tr') is not null) DROP trigger WMY END; GO CREATE T ...
- 【database】oracle触发器基础
一.oracle触发器基本语法 CREATE [OR REPLACE] TRIGGER trigger_name {BEFORE | AFTER } {INSERT | DELETE | UPDATE ...
- oracle触发器判断空值,oracle触发器加条件判断、dblink
--新增基站同步给电池组信息 create or replace trigger a_b_test after insert or update or delete on BJLT.BASESTATI ...
- Oracle 触发器调用存储过程|转||待研究|
Oracle触发器调用存储过程资料收集整理 触发器:Trigger 存储过程:Stored Procedure // ******************** 收集1 **************** ...
- oracle触发器高级教程
[转自]http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_7004.htm#i2153503 CREA ...
- oracle行级的触发器,Oracle触发器Trigger2行级
create table trigger_t2( id int, name varchar(30), age int ); /* --创建一个before update的触发器-控制每一行,行级 -- ...
- oracle触发器 select into,Oracle触发器中selectinto报错no_data_found异常处理
Oracle触发器中select into 报错no_data_found异常处理 红色部分为对查询不到数据异常的处理 create or replace trigger TIG_MONITOR_AL ...
最新文章
- eclipse java 7_在Eclipse中编程Java 7
- UA MATH577 逻辑与可计算性1 递归函数
- VS Code Remote,在服务器上开发程序,开启全新开发模式
- WinAPI: GetUserName - 获取当前用户名
- 【机器视觉】 return算子
- 一头扎进Node(三) - File System
- [Vue warn]: Invalid prop: custom validator check failed for prop xxx.问题
- 计算机卡在无法显示网页,我的电脑上网上银行一直“无法显示网页”
- 【转】mysql触发器的实战(触发器执行失败,sql会回滚吗)
- codeforces 676C (尺取法)
- 软件开发项目计划书编写说明
- ndows优化大师 免费版,Windows优化大师
- 谷歌浏览器使用复制的功能
- 台式计算机开机后黑屏,电脑开机显示黑屏有关的问题与解决方法
- 获得中国行政区划接口
- 欧标插头EN50075测试项目
- DPU — 完全可编程网络
- 经典重写alert方法
- 智慧工地安全施工实时监测系统解决方案
- PHP代码审计--百家CMS4.1.4项目实战(下)