`
chenj847
  • 浏览: 53589 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

触发器的建立

阅读更多
触发器是特定事件出现的时候,自动执行的代码块。类似于存储过程,但是用户不能直接调用他们。
功能:
1、 允许/限制对表的修改
2、 自动生成派生列,比如自增字段
3、 强制数据一致性
4、 提供审计和日志记录
5、 防止无效的事务处理
6、 启用复杂的业务逻辑
开始

create trigger biufer_employees_department_id before insert or update of department_id on employees referencing old as old_value new as new_value for each row when (new_value.department_id<>80 ) begin :new_value.commission_pct :=0; end; /


触发器的组成部分:
1、 触发器名称
2、 触发语句
3、 触发器限制
4、 触发操作
1、 触发器名称

create trigger biufer_employees_department_id

命名习惯:

biufer(before insert update for each row)

employees 表名
department_id 列名
2、 触发语句
比如:
表或视图上的DML语句
DDL语句
数据库关闭或启动,startup shutdown 等等

when (new_value.department_id<>80 )

说明:
1、 无论是否规定了department_id ,对employees表进行insert的时候
2、 对employees表的department_id列进行update的时候
3、 触发器限制

when (new_value.department_id<>80 )

限制不是必须的。此例表示如果列department_id不等于80的时候,触发器就会执行。
其中的new_value是代表更新之后的值。
4、 触发操作
是触发器的主体

begin

:new_value.commission_pct :=0;
end;
主体很简单,就是将更新后的commission_pct列置为0
触发:

insert into employees(employee_id,

last_name,first_name,hire_date,job_id,email,department_id,salary,commission_pct )
values( 12345,’Chen’,’Donny’, sysdate, 12, ‘donny@hotmail.com’,60,10000,.25);
select commission_pct from employees where employee_id=12345;
触发器不会通知用户,便改变了用户的输入值。
触发器类型:
1、 语句触发器
2、 行触发器
3、 INSTEAD OF 触发器
4、 系统条件触发器
5、 用户事件触发器
1、 语句触发器
是在表上或者某些情况下的视图上执行的特定语句或者语句组上的触发器。能够与INSERT、UPDATE、 DELETE或者组合上进行关联。但是无论使用什么样的组合,各个语句触发器都只会针对指定语句激活一次。比如,无论update多少行,也只会调用一次 update语句触发器。
例子:
需要对在表上进行DML操作的用户进行安全检查,看是否具有合适的特权。
以下是引用片段:

Create table foo(a number); Create trigger biud_foo Before insert or update or delete On foo Begin If user not in (‘DONNY’) then Raise_application_error(-20001, ‘You don’t have access to modify this table.’); End if; End; /


即使SYS,SYSTEM用户也不能修改foo表
[试验]
对修改表的时间、人物进行日志记录。
1、 建立试验表
create table employees_copy as select *from hr.employees
2、 建立日志表

create table employees_log(

who varchar2(30),
when date);
3、 在employees_copy表上建立语句触发器,在触发器中填充employees_log 表。

Create or replace trigger biud_employee_copy Before insert or update or delete On employees_copy Begin Insert into employees_log( Who,when) Values( user, sysdate); End; /




4、 测试


update employees_copy set salary= salary*1.1;

select *from employess_log;


5、 确定是哪个语句起作用?


即是INSERT/UPDATE/DELETE中的哪一个触发了触发器?


可以在触发器中使用INSERTING / UPDATING / DELETING 条件谓词,作判断:


begin if inserting then ----- elsif updating then ----- elsif deleting then ------ end if; end; if updating(‘COL1’) or updating(‘COL2’) then ------ end if;



[试验]


1、 修改日志表


 alter table employees_log

add (action varchar2(20));

2、 修改触发器,以便记录语句类型。


以下是引用片段:





Create or replace trigger biud_employee_copy Before insert or update or delete On employees_copy Declare L_action employees_log.action%type; Begin if inserting then l_action:=’Insert’; elsif updating then l_action:=’Update’; elsif deleting then l_action:=’Delete’; else raise_application_error(-20001,’You should never ever get this error.’); Insert into employees_log( Who,action,when) Values( user, l_action,sysdate); End;

分享到:
评论
1 楼 justin18 2010-06-22  
一直對觸發器不理解,看了以後明白多了,謝謝~

相关推荐

    触发器建立oracle主键

    一个自己写的用触发器建立主键的程序,自己终于研究出来了,特此献上

    Oraclet中的触发器

    (2)触发器建立在表一级,它与特定的数据修改事件相对应。 触发器类型 触发器在数据库里以独立的对象存储,它与存储过程不同的是,存储过程通过其它程序来启动运行或直接启动运行,而触发器是由一个事件来启动...

    精通Oracle核心技术和项目实战之触发器.

    - **触发表**:触发器建立在哪张表之上。 - **响应操作**:触发器响应哪种DML操作。 - **执行时机**:是在DML操作前还是后执行。 - **执行级别**:是语句级触发器还是行级触发器。 DML触发器可以: - 实现级联更改...

    Oracle_plsql基本语法笔记.txt

    Oracle 常用命令举例 标题 基本语法 %type用法,%rowtype用法,TYPE用法 ... 建立简单的触发器 触发器分类 稍复杂的触发器 条件谓词 触发器中不可使用Commit 系统触发器举例(LOGON) instead of 触发器

    触发器的建立使用

    发器是一种特殊的存储过程,它在执行语言事件执行时自动生效。

    数据库中表、视图、存储过程、触发器的建立及其代码。

    在数据库管理中,表、视图、存储过程和触发器是四大关键元素,它们共同构建了数据管理和交互的基础架构。下面将详细介绍这四个概念以及如何用代码创建它们。 1. **表的建立**:表是数据库中最基本的数据结构,用于...

    fpga面试---数电部分 (2).pdf

    同步器的有效性取决于第一级触发器恢复时间和第二级触发器建立时间的关系。 在系统最高速度计算,即最快时钟频率的确定上,需要考虑触发器的时钟延迟(Tco)、组合逻辑延迟(Tdelay)以及触发器的建立时间(Tsetup...

    D触发器原理-D触发器电路图

    其建立时间tset应该大于等于2个传输延迟时间tpd,而保持时间tHL应大于等于tpd。此外,传输延迟时间的特性也可以分为两个部分:tPHL和tPLH,分别是高到低和低到高的传输延迟时间,通常tPHL=3tpd,而tPLH=2tpd。这些...

    Gbase 8s触发器介绍.doc

    3. 建立 select 触发器,当查询到 t1 表的 name 列值等于"Bill"时,将对应的 id 插入表 t2: CREATE TRIGGER select_t1 SELECT ON t1 REFERENCING OLD AS old FOR EACH ROW WHEN (name = 'Bill') (INSERT INTO t2 ...

    计算机强校99+分《数据库系统》课设

    5.4 触发器建立 5.5 建存储过程 6、应用系统开发与试运行 6.1 开发平台和开发环境介绍。 6.2 前台界面与后台数据库连接说明,代码实现。 6.3 系统各功能设计和运行界面截图。 7、实验总结 7.1 遇到的问题和解决的...

    建立触发器-数据库vfvfds

    在数据库管理中,触发器是一种特殊的存储过程,它在特定的数据操作(如INSERT、UPDATE或DELETE)发生时自动执行。本示例展示了如何在SQL Server中创建和使用触发器,以实现表间数据同步。 首先,创建了两个测试表格...

    oracle实现属性的自增

    建立触发器的语法是:CREATE OR REPLACE TRIGGER 触发器名称 BEFORE/AFTER 事件 ON 表名 FOR EACH ROW DECLARE 变量声明 BEGIN 语句 END;。例如:CREATE OR REPLACE TRIGGER smslog_trigger BEFORE INSERT ON smslog...

    SQL数据库触发器 SQL数据库触发器

    建立好触发器后,现在只要我们删除 uRecord 表中的一条记录,就会在系统日志中增加一条事件日志。 通过以上简单的介绍,希望原来没有使用过触发器的朋友能对触发器有个大致的概念和印象,如果你要深入了解的话,SQL...

    oracle序列和触发器的建立

    ### Oracle序列和触发器的建立 #### 序列(Sequence) 在Oracle数据库中,序列是一种自动产生数值的对象,常用于为主键字段提供唯一值。序列主要用于实现表中的自增ID功能,例如,当用户需要为某张表的主键设置自...

    学生学籍管理系统数据库设计实训报告

    6. 触发器建立:建立触发器以自动执行业务逻辑。 数据库具体实施步骤 在实施数据库设计时,我们需要按照以下步骤进行: 1. 创建数据库:使用SQL Server管理工具创建数据库。 2. 创建表对象:使用SQL Server管理...

    触发器练习答案(附有测试文档)

    ### 触发器基本概念与应用场景 触发器是一种存储过程,它被定义为响应特定类型的数据库事件(如INSERT、UPDATE、DELETE)而自动执行的SQL语句集合。这些事件通常与特定的表相关联。触发器在确保数据完整性方面非常...

    Sqlserver数据库课程设计图书馆管理系统样本.doc

    该系统规定管理人员可以对数据库进行纯熟操作,包括表查询、触发器建立、存储过程建立以及顾客自定义函数建立等等。 三、图书馆管理系统 E-R 图 E-R 图是该系统的数据模型,描述了图书、读者、借阅信息等实体之间...

    家教信息管理系统数据库课程设计.doc

    物理结构设计是指家教信息管理系统的物理结构设计,包括设计表、数据库与表的创建、建立视图、建立索引、建立存储过程和建立触发器等。 3.4.1 设计表 设计表是指家教信息管理系统的设计表,包括教员信息表、管理员...

    PLSQL触发器.pdf

    四、 建立行级触发器 行级触发器是指当执行 DML 操作时,以数据行为单位执行的触发器,即每一行数据都会执行一次触发器。语法: create [or replace] trigger triggerName before | after insert | update | ...

Global site tag (gtag.js) - Google Analytics