`
百合不是茶
  • 浏览: 344188 次
社区版块
存档分类
最新评论

PL/SQL触发器基础及例子

阅读更多

 

触发器的简介;

触发器的定义就是说某个条件成立的时候,触发器里面所定义的语句就会被自动的执行。因此触发器不需要人为的去调用,也不能调用。触发器和过程函数类似 过程函数必须要调用,

 

一个表中最多只能有12个触发器类型的,触发器和过程函数相似 触发器不需要调用直接执行,


触发时间:指明触发器何时执行,该值可取:
before:表示在数据库动作之前触发器执行;
after:表示在数据库动作之后触发器执行。
触发事件:指明哪些数据库动作会触发此触发器:
insert:数据库插入会触发此触发器;
update:数据库修改会触发此触发器;
delete:数据库删除会触发此触发器。
表 名:数据库触发器所在的表。
for each row:对表的每一行触发器执行一次。如果没有这一选项,则只对整个表执行一次。
 

触发器的创建语法:

 

触发器emp表中添加的数据,将删除的数据添加到emp_bak中

1),复制scott用户下的emp表的结构

 

create table emp_bak as select * from emp where 1=2;

2),向emp表插入一条数据

 

--插入数据到emp
insert into emp values(1234,'wangerxiao','SALESMAN',7902,to_date('1990-1-1','yyyy-mm-dd'),1000,100,20);

 

3),创建emp表删除添加的触发器

create  or replace trigger tr_emp --定义触发器
before delete --执行时间
on emp_bak  --在emp_bak表中
for each row -- 行级删除
begin
--:old 操作前的数据   :new 是操作后的数据
  insert into emp_copy values(:old.empno,:old.ename,:old.job,:old.mgr,:old.hiredate,:old.sal,:old.comm,:old.deptno);
end;

 

4),删除添加的数据

SQL> delete from emp_bak where empno=1234;
 
1 row deleted

 

5),查询emp_bak表

数据已经添加到emp_bak表中了

SQL> select * from emp_bak;
 
EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
 1234 wangerxiao SALESMAN   7902 1990/1/1      1000.00    100.00     20

 

6),触发器的删除

drop trigger tr_emp;

 

 

完成上述的例子,我们已经会创建基本都是的触发器了

 

 

 

2,---------------------使用触发器限制用户emp对表的操作(非工作时间只能查询数据)

--限制对emp表修改(包括INSERT,DELETE,UPDATE)的时间范围,
--即不允许在非工作时间(周末,8:30以前 17:30以后)修改emp表。

 

创建触发器

create or replace trigger tr_emps
before delete or update or insert
on emp
for each row
begin
   if (to_char(sysdate,'DAY') in ('星期六','星期日') or 

to_char(sysdate,'HH24:MI') not between '08:30' and '22:00' )  then
    raise_application_error(-20001,'不能在这个时间操作数据'); 
end if;
end;

使用触发器限制的时候,用户输入的可能会报错,所以需要定义异常

 

 raise_application_error(-20001,'不能在这个时间操作数据'); 

 

在8点30到22:00可以 删, 更新,曾加

SQL> update emp set sal=1000 where ename='SMITH';
 
1 row updated

 

不在规定时间内 更新数据

SQL> update emp set sal=1000 where ename='SMITH';
 
update emp set sal=1000 where ename='SMITH'
 
ORA-20001: 不能在这个时间操作数

据
ORA-06512: 在 "SCOTT.TR_EMPS", line 7
ORA-04088: 触发器 'SCOTT.TR_EMPS' 执行过程中出错
 

 

 

3---------------------------------------触发器限定操作

--限定只对部门号为10的记录进行行触发器操作。
--如果改变的sal和comm比现在少的话报错,删除记录的话也报错,其他操作执行。

 

create or replace trigger tr_emps
brfore update of sal, comm or dalete
on emp
for each row
  when (old.deptno=10)--只有当部门号是10的时候才触发
begin
    case
      when updating('sal') then
      if :old.sal<:new.sal then
       raise_application_error(-20002,'不能降低工资');
      end  if;
     when updating('comm') then
      if :old.comm<:new.comm then
      raise_application_error(-20003,'不能降低奖金!');
    end if;
  when deleting then
  raise_application_error(-20004,'不能开除这个部门的员工');
     
    end case;
end;

 

 

4-----------------------触发器的联机更新


--利用行触发器实现级联更新
--如果将dept表部门编号改为新值,
--就需要将emp表中的所有为该部门的部门编号改为新值

create or replace trigger tr_update_demp
after update of deptno
on dept
for each row
  begin
    update emp set deptno=:new.deptno where deptno=:old.deptno;
  end;

 

 

 

 

 

 

 

 

 

 

 

 

5--------------------------触发器对视图的操作

 

 

 

 

 

 

7
3
分享到:
评论
2 楼 Y_1746119035 2014-10-24  
谁踩了,拖出去打一顿
1 楼 xunmengsj 2014-10-24  
真心想不明白为什么会有人踩

相关推荐

    PL/SQL语法介绍(例子为主,详细注释)

    PL/SQL语法介绍(例子为主,详细注释),过程十分详细。 PL/SQL语法介绍(例子为主,详细注释),过程十分详细。

    PL/SQL存储过程语法(注释详细,例子多)

    PL/SQL存储过程语法(注释详细,例子多,注释十分清楚,入门良册) PL/SQL存储过程语法(注释详细,例子多,注释十分清楚,入门良册)

    pl/sql及常见实用oracle语句学习

    这是本人在实践中收集总结的,有存储过程、序列、游标、触发器、索引及其它一些常用的语句(如日期、over partion by具体使用包括一些例子),还有两本高清这方面的书,一起放在里面,方便大家学习。

    Oracle数据库SQL和PL/SQL实例教程

    Oracle数据库SQL和PL/SQL实例教程 非常适用于初学者。结合例子深刻形象的讲解。 第1章 关系数据库与SQL语言环境 第2章 数据查询 第3章 数据操作 第4章 表和视图 第5章 其他数据库对象 第6章 SQL基础 第7章 游标和...

    pl/sql语法说明和总结

    对于pl/sql的语法的详细说明和总结 其中给出一些的例子来说明兑语法的使用

    PLSQL基础教程

    §1.2 SQL与PL/SQL 4 §1.2.1 什么是PL/SQL? 4 §1.2.1 PL/SQL的好处 4 §1.2.2 PL/SQL 可用的SQL语句 5 §1.3 运行PL/SQL程序 5 第二章 PL/SQL块结构和组成元素 6 §2.1 PL/SQL块 6 §2.2 PL/SQL结构 6 §...

    PLSQL程序设计

    第一章 PL/SQL 程序设计简介 4 §1.2 SQL与PL/SQL 4 §1.2.1 什么是PL/SQL? 4 §1.2.1 PL/SQL的好处 4 §1.2.2 PL/SQL 可用的SQL语句 5 §1.3 运行PL/SQL程序 5 第二章 PL/SQL块结构和组成元素 6 §2.1 PL/SQL块 6 ...

    oracle学习资料

    第一章 PL/SQL 程序设计简介 4 §1.2 SQL与PL/SQL 4 §1.2.1 什么是PL/SQL? 4 §1.2.1 PL/SQL的好处 4 §1.2.2 PL/SQL 可用的SQL语句 5 §1.3 运行PL/SQL程序 5 第二章 PL/SQL块结构和组成元素 6 §2.1 PL/SQL块 6 ...

    plsql_oracle 编程

    第一章 PL/SQL 程序设计简介 4 §1.2 SQL与PL/SQL 4 §1.2.1 什么是PL/SQL? 4 §1.2.1 PL/SQL的好处 4 §1.2.2 PL/SQL 可用的SQL语句 5 §1.3 运行PL/SQL程序 5 第二章 PL/SQL块结构和组成元素 6 §2.1 PL/SQL块 6 ...

    plsql_oracle 8i 编程讲义

    第一章 PL/SQL 程序设计简介 4 §1.2 SQL与PL/SQL 4 §1.2.1 什么是PL/SQL? 4 §1.2.1 PL/SQL的好处 4 §1.2.2 PL/SQL 可用的SQL语句 5 §1.3 运行PL/SQL程序 5 第二章 PL/SQL块结构和组成元素 6 §2.1 PL/SQL块 6 ...

    Oracle-PL/SQL教程

    详细讲解了PLSQL的基本语法,以及储存过程、函数、触发器、游标和包。文档中还包括例子和练习。

    OraclePLSQL编程经典例子

    PL/SQL编程 pl/sql(procedural language/sql)是Oracle在标准的sql语言上的扩展。pl/sql不仅允许嵌入式sql语言,还可以定义变量和常量,允许使用条件语句和循环语句,允许使用例外处理各种错误。这样使得他的功能变...

    Oracle8i/9i 数据库基础(对想全面了解Oracle的程序员来说真是一本很好的书)

    PL/SQL 程序设计所用到基本知识,这部分给出进行应用设计所必需的基础知识。这两部分 的内容都尽可能做到内容简洁而全面。特点是,1.用简单明了的语句对解释各个部分的内容, 省去一些理论性的解释;2.给出作者在...

    Orcal 数据库触发器文件

    orcal 数据库文件,关于触发器的例子,没有什么多大的用处

    Oracle使用触发器和mysql中使用触发器的案例比较

    一、触发器  1.触发器在数据库里以独立的对象存储,  2.触发器不需要调用,它由一个事件来触发运行 ...二、Oracle 使用 PL/SQL 编写触发器 1.–PL/SQL创建触发器的一般语法 create [or replace] trigger trigg

    Oracle8i/9i数据库基础

    第二部分是介绍ORACLE PL/SQL知识,主要讲述ORACLE数据库PL/SQL程序设计所用到基本知识,这部分给出进行应用设计所必需的基础知识。这两部分的内容都尽可能做到内容简洁而全面。特点是,1.用简单明了的语句对解释...

    Oracle8i_9i数据库基础

    第二部分是介绍ORACLE PL/SQL知识,主要讲述ORACLE数据库PL/SQL程序设计所用到基本知识,这部分给出进行应用设计所必需的基础知识。这两部分的内容都尽可能做到内容简洁而全面。特点是,1.用简单明了的语句对解释...

    oracle 应用教程

    第二部分是介绍ORACLE PL/SQL知识,主要讲述ORACLE数据库PL/SQL程序设计所用到基本知识,这部分给出进行应用设计所必需的基础知识。这两部分的内容都尽可能做到内容简洁而全面。特点是,1.用简单明了的语句对解释...

    数据库基础

    §1.3 SQL、SQL*Plus及 PL/SQL 25 §1.3.1 SQL和SQL*PLUS的差别 25 §1.3.2 PL/SQL语言 27 §1.4 登录到SQL*PLUS 27 §1.4.1 UNIX环境 27 §1.4.2 Windows NT和WINDOWS/2000环境 29 §1.5 常用SQL*PLUS 附加命令简介...

Global site tag (gtag.js) - Google Analytics