oracle 行触发与语句触发的区别
1、行触发器有 for each row子句。语句触发器没有for each row 子句。
2、行触发器,可以有 when 作为触发限制,可以使用new/old。语句触发器不能有when 作为触发限制。
3、行触发器:对应DML语句所影响到的表中的每一行,触发器都要执行一遍。
4、语句触发:对应DML语句所影响到的表中的所有行,触发器只执行一遍。
例子:
--测试表
create table wdt_test(test number(20));
--日志表
create table wdt_log(log_no number(20), log_date date);
--触发器
create or replace trigger buf_wdt_test
before update on wdt_test
--for each row
declare
ln_log_no wdt_log.log_no%type default 0;
begin
select nvl(max(log_no), 0) + 1
into ln_log_no
from wdt_log;
insert into wdt_log
(log_no,
log_date)
values
(ln_log_no,
sysdate);
end;
--测试
SQL> insert into wdt_tset (test) values(11);
SQL> insert into wdt_tset (test) values(22);
SQL> insert into wdt_tset (test) values(33);
SQL> update wdt_test set test = 88;
SQL> select * from wdt_log order by log_no; --结果只有1条记录、证明触发器只工作了一次
将触发器代码中的 for each row 解开注释,变成行触发,再继续测试。
SQL> update wdt_test set test = 99;
SQL> select * from wdt_log order by log_no; --结果有3条记录、证明触发器按行工作了3次
注释1:NVL方法
从两个表达式返回一个非 null 值。
语法
NVL(eExpression1, eExpression2)
参数
eExpression1, eExpression2
如果 eExpression1 的计算结果为 null 值,则 NVL( ) 返回 eExpression2。如果 eExpression1 的计算结果不是 null 值,则返回 eExpression1。eExpression1 和 eExpression2 可以是任意一种数据类型。如果 eExpression1 与 eExpression2 的结果皆为 null 值,则 NVL( ) 返回 .NULL.。
返回值类型
字符型、日期型、日期时间型、数值型、货币型、逻辑型或 null 值
说明
在不支持 null 值或 null 值无关紧要的情况下,可以使用 NVL( ) 来移去计算或操作中的 null 值。
分享到:
相关推荐
在这个场景中,我们可以利用批处理文件来简化Oracle数据库的操作,如删除用户、创建用户、创建表和触发器,以及执行其他SQL语句。 首先,我们需要了解如何在批处理文件中连接Oracle数据库。这通常通过Oracle的...
"oracle触发器的种类和触发事件" Oracle触发器是一种特殊的存储过程,它可以在数据库中自动执行一些操作,主要用于实现数据的完整性、数据的安全性和业务逻辑的实现。触发器可以分为四种类型:DML触发器、DDL触发器...
它通常与Toad for Oracle这样的第三方工具结合使用,Toad是一款广泛应用于Oracle数据库管理的软件,提供了丰富的功能,包括SQL开发、数据库管理和性能优化。 在Toad for Oracle绿色版2.4.3.6中,SQL Monitor功能...
这些操作都需要适当的权限,并且可能触发与数据完整性相关的约束,例如外键约束。 4. **聚合函数和分组**:GROUP BY和HAVING语句用于对数据进行分组并应用聚合函数,这对于统计分析非常有用。HAVING是在GROUP BY...
本篇将深入探讨Oracle关于日期的查询语句及其相关知识点。 1. 数据类型: Oracle提供了多种日期和时间数据类型,包括DATE、TIMESTAMP、TIMESTAMP WITH TIME ZONE以及TIMESTAMP WITH LOCAL TIME ZONE。其中,DATE...
在Oracle数据库中,多表关联的UPDATE语句用于更新一个表中的数据,这些数据依赖于另一个或多个表的记录。这种操作在数据整合、错误修正或者数据同步时非常常见。以下我们将详细探讨如何使用不同方式执行多表关联的...
以上内容详细介绍了Oracle中的一些常用语句,包括登录与管理、对象管理以及删除操作的差异等方面。这些知识点对于Oracle数据库管理员来说非常重要,能够帮助他们更好地管理和维护Oracle数据库系统。通过理解这些语句...
### Oracle初级学习操作语句详解 #### 一、概述 Oracle数据库系统因其高效性和稳定性,在企业级应用中占据着重要地位。SQL(Structured Query Language)作为标准的关系型数据库查询语言,是与Oracle交互的主要手段...
UPDATE 语句通常与 SET 和 WHERE 子句一起使用,用于修改满足特定条件的行。例如: ```sql UPDATE order_rollup SET (qty, price) = (SELECT SUM(qty), SUM(price) FROM order_lines WHERE customer_id = 'KOHL' ...
本文将深入探讨Oracle数据库语句、存储过程、函数以及触发器,帮助读者理解并掌握PL/SQL操作。 首先,Oracle数据库语句主要包括SQL(结构化查询语言)和PL/SQL。SQL是用于管理关系数据库的标准语言,用于查询、插入...
### Oracle 修改数据库库表的各种情况和SQL语句 在日常的数据库管理与开发工作中,我们经常需要对现有的数据库表结构进行调整以满足业务需求的变化。本文将详细介绍在Oracle数据库中如何针对不同情况来修改数据库表...
BEFORE 触发器在执行触发语句之前触发,反之,AFTER 触发器在执行触发语句之后触发。For each row (行级) 选项指定触发器在每一行触发一次。 在 Oracle 中,DML 触发器可以分为四种类型: * BEFORE DML 语句 ON ...
* 触发器的类型:行触发、语句触发 内联接和外联接 * 内联接:保证两个表中所有的行都要满足连接条件 * 外联接:限制其中一个表的行,而不限制另一个表的行 SQL 试题 * 写一条 SQL 语句让教师号、星期号、是否有...
这是一种非常快速的操作,因为不会记录每一行的删除操作,也不会触发删除触发器。此外,TRUNCATE操作不会回滚,这意味着一旦执行就无法撤销。 #### 示例 继续使用`employees`表为例,如果只想清空表中的所有数据而...
- DDL触发器在创建、删除或修改数据库对象(如表、视图、索引等)的语句执行之前和之后触发。这为审计、权限控制和数据库设计的规范化提供了可能。 5. **DML (Data Manipulation Language)**: - 对于INSERT、...
4. **调用堆栈跟踪**:该工具还可以追踪到调用SQL语句的程序代码路径,这对于排查应用程序与数据库交互的问题至关重要。 5. **实时监控**:实时监控数据库活动,及时发现并解决性能问题。可以设置阈值触发警报,...
### Oracle数据库应用与开发讲义知识点汇总 #### 专题一:Oracle入门 ##### 教学目标 1. **了解Oracle10g的安装和卸载流程**:掌握Oracle10g在不同操作系统上的安装和卸载步骤。 2. **学会配置Oracle客户端**:...
本资料“ORACLE数据库SQL语句编写优化总结”深入探讨了如何有效地编写和优化SQL语句,以达到最佳的查询效率。 1. **理解执行计划** - **执行计划**是Oracle解析SQL语句后确定的数据获取策略,了解执行计划可以帮助...
需要注意的是,Delete语句会触发Oracle的事务管理机制,每删除一行都会记录一个回滚信息,以便在事务回滚时恢复数据。因此,当处理大量数据时,Delete语句可能会消耗大量的系统资源和时间。 二、Truncate语句 ...