ORACLE的TRIGGER的用法
看过这个篇文章之后,对自己的提高很大,我写过很多存储过程,很多函数,很多程序包,唯独没有写过TRIGGER,其实自己对TRIGGER的理解还不是很深,一直想试试,可惜没有机会.看过此文章后,觉得自己应该有能力写一个非常标准的TRIGGER了.
附原文:
原文引自 日月明王
TRIGGER之我见
日月明王
http://spaces.msn.com/sunmoonking/
1. trigger 是自动提交的,不用COMMIT,ROLLBACK
2. trigger最大为32K,如果有复杂的应用可以通过在TRIGGER里调用PROCEDURE或FUNCTION来实现。
3. 语法CREATE OR REPLACE TRIGGER <trigger_name>
<BEFORE | AFTER> <ACTION>
ON <table_name>
DECLARE
<variable definitions>
BEGIN
<trigger_code>
EXCEPTION
<exception clauses>
END <trigger_name>;
/
4. 相关命令
create trigger
create any trigger
administer database trigger
alter any trigger
drop any trigger
5. 对列做触发(of)(行的触发是最常见的,不在这里列出
1 create or replace trigger tri_wwm
2 before update of id on wwm2 for each row
3 declare the_str VARCHAR2(40):='update on wwm2''s id column';
4 begin
5 dbms_output.put_line(the_str);
6* end tri_wwm;
SQL> /
Trigger created.
SQL> update wwm2 set id=3;
update on wwm2's id column
1 row updated.
6. Referencing 别名
测试数据
SQL> select * from wwm2;
ID NAME
---------- ----------
1 wwm
2 china
建测试用日志表
1 create table wwm_log
2 (o_id number(8),o_name varchar2(10),
3 n_id number(8),n_name varchar2(10),
4* op_by varchar2(20),op_date date)
SQL> /
Table created.
建立 触发器
create or replace trigger tri_refer
after update of id on wwm2 referencing new as new old as old for each row
begin
insert into wwm_log values (:old.id,:old.name,:new.id,:new.name,sysdate,user);
end;
/
更新表以触发事件
SQL> update wwm2 set id=8 where id=2;
update on wwm2's id column
1 row updated.
SQL> select * from wwm_log;
O_ID O_NAME N_ID N_NAME OP_DATE OP_USER
---------- ---------- ---------- ---------- --------- -----------------
2 china 8 china 09-MAR-06 SYSTEM
大家可以用这个方法来对一些操作做日志
7.Disable/Enable
ALTER TRIGGER tri_refer DISABLE/ENABLE
ALTER TABLE wwm2 DISABLE/ENABLE ALL TRIGGERS;
ALTER TRIGGER tri_refer RENAME TO tri_reference;
TRIGGER的种类还有很多,如DDL和SYSTEM的触发器,下次用到时再写吧。
分享到:
相关推荐
在Oracle数据库中,跟踪用户活动是一项重要的管理任务,有助于监控系统的使用情况、保障安全和优化性能。Oracle从Oracle8i开始引入了一类特殊触发器,它们不再局限于传统的DML事件,而是扩展到了系统级别,包括...
综上所述,使用Oracle触发器备份表数据是一种高效且灵活的方法,但同时也需要注意其潜在的局限性和挑战。通过合理设计和优化触发器,可以有效提升数据备份的效率和安全性,为数据库管理提供有力的支持。
这个问题可以通过使用Oracle自治事务来解决。 Oracle自治事务将一个主事务分割成几个子事务,在执行完子事务以后再继续主事务。这里的关键是,子事务是独立于主事务的,子事务中的Rollback和Commit操作只会影响子...
"loadjava"标签可能指的是使用Oracle的LOADJAVA工具来加载Java源代码或类文件到数据库,以便在数据库中直接运行Java代码。这使得我们能够在数据库环境中利用Java的丰富库,比如生成二维码的库。 总结起来,这个项目...
Oracle作为一款广泛使用的数据库管理系统,提供了丰富的功能来保障数据安全。其中,系统触发器是Oracle提供的一种强大工具,能够帮助管理员监控并干预特定的数据库操作,有效防止误操作导致的数据丢失。 #### 问题...
在Oracle中,触发器由CREATE TRIGGER语句定义,它可以监听表上的特定操作。例如,一个INSERT触发器会在新的行被插入到表中时执行。触发器的代码可以访问新插入的行,并根据需要执行额外的操作,如日志记录、业务逻辑...
在本文中,我们将介绍如何使用Oracle触发器调用Java程序。 一、加载Java程序 首先,我们需要将Java程序加载到Oracle数据库中。我们可以使用LOADJAVA命令来实现这一步骤。LOADJAVA命令位于$ORACLE_HOME/bin目录下,...
### ORACLE自增主键设置方法 在Oracle数据库中,自增主键是一种常见的主键设计方式,它能够确保每条记录的唯一性,并且在插入新记录时自动递增,简化了数据管理流程。本文将详细介绍如何在Oracle中设置自增主键。 ...
### Oracle DBLink创建过程及快照同步方法 #### 一、Oracle DBLink概念与创建步骤 DBLink(Database Link)是Oracle提供的一种机制,用于在不同的Oracle数据库实例之间建立连接,实现跨数据库查询、更新等功能。它...
### Oracle建立自增主键 在Oracle数据库管理中,创建自增主键是一种常见...总之,通过组合使用`SEQUENCE`和`TRIGGER`,可以有效地在Oracle数据库中实现自增主键功能,从而简化数据库管理并提高数据的一致性与完整性。
根据提供的文件信息,本文将详细解释Oracle数据库中的表创建、序列及触发器的使用方法,特别关注于如何实现主键自增长功能。 ### Oracle 创建表示例 #### 1. 创建学生表 (Student Table) 首先来看如何创建一个...
本文详细介绍了在Linux环境下使用命令行方式增加Oracle数据库表空间和创建用户的方法。通过这些步骤,可以有效地管理和优化Oracle数据库,确保其高效稳定运行。对于实际操作过程中可能遇到的问题,建议参考Oracle...
本资源提供了 Oracle 的全面教程,涵盖了 Oracle 的基本使用、函数、存储过程、触发器、复杂查询等高级操作。 基本使用 Oracle 的基本使用包括连接命令、文件操作命令、交互式命令、显示和设置环境变量等。 * ...
下面将详细介绍 Oracle 数据库主键自动生成的实现方法和相关知识点。 序列(Sequence) 序列是一种数据库对象,它可以生成一系列唯一的数字值,常用来生成主键值。在 Oracle 数据库中,可以使用以下语句创建一个...
在Oracle中创建触发器使用CREATE TRIGGER语句,基本语法为CREATE TRIGGER trigger_name BEFORE/AFTER INSERT/UPDATE/DELETE ON table_name FOR EACH ROW; 17. 如何管理用户权限? 通过GRANT语句赋予用户权限,...
- 创建触发器:CREATE TRIGGER语句的使用方法。 - 触发器事件:INSERT、UPDATE、DELETE等触发事件的处理。 5. **序列**: - 序列的概念:了解序列的基本用途。 - 创建序列:CREATE SEQUENCE语句的使用方法。 -...
本文将对 Oracle DML 触发器的工作原理、类型、使用方法等进行详细的介绍,并提供了实践中的应用示例。 1. Oracle DML 触发器的工作原理 Oracle DML 触发器是一种特殊类型的存储过程,它可以自动执行 SQL 和 PL/...
4. 内置程序包的分类和功能概述,如DBMS_OUTPUT的使用方法和实例。 5. 如何在PL/SQL代码中调用内置程序包的成员,以及如何查看和理解其文档。 6. 实战练习,通过案例分析如何利用触发器和内置程序包解决实际问题。 ...
- **启用触发器**:同样地,使用 `ALTER TRIGGER trigger_name ENABLE;` 可以重新激活已禁用的触发器。 - **禁用/启用表上的所有触发器**:`ALTER TABLE table_name DISABLE ALL TRIGGERS;` 和 `ALTER TABLE table_...