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

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  
真心想不明白为什么会有人踩

相关推荐

    《精通Oracle PL/SQL》源码

    4. **触发器**:触发器是在特定数据库事件发生时自动执行的PL/SQL代码,例如INSERT、UPDATE或DELETE操作。这些示例可能展示了如何创建和使用触发器来实现业务规则。 5. **包(Packages)**:包是组织PL/SQL代码的...

    Oracle PL/SQL程序设计(第5版)源代码

    第5版的书籍不仅涵盖了PL/SQL的基础知识,还深入探讨了高级特性和最佳实践。这本书的源代码提供了丰富的示例和练习,帮助读者理解和掌握PL/SQL编程技巧。 PL/SQL是Oracle数据库的内置编程语言,它是SQL的扩展,允许...

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

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

    Oracle PL/SQL程序设计(第5版)示例代码

    总的来说,《Oracle PL/SQL程序设计(第5版)》的示例代码是学习数据库编程的宝贵资源,它涵盖了从基础到高级的各种概念,是提升数据库开发技能的有力工具。通过深入学习和实践这些代码,开发者将能够更好地驾驭...

    PL/SQL程序设计.doc

    综上所述,《PL/SQL程序设计》这份资料详尽地介绍了PL/SQL的各个方面,不仅讲解了基础概念,还涵盖了实际编程中的实用技巧,是学习和提升PL/SQL技能的重要参考资料。通过深入学习,开发者能够充分利用PL/SQL的强大...

    pl_sql.zip_fetch_pl/sql_pl_sql_plsql_plsql java

    总的来说,这个压缩包文件提供了一个全面的PL/SQL学习资源,涵盖了基础的SQL操作、游标使用、数据更新、触发器以及循环结构,并且展示了与Java的交互。通过分析和实践这些脚本,初学者可以深入理解PL/SQL编程,并...

    Oracle PL/SQL实例精讲--使用表,课后答案

    Oracle PL/SQL是一种强大的数据库编程语言,用于在Oracle数据库中执行复杂的业务逻辑和数据操作。在"Oracle PL/SQL实例精讲--使用表,课后答案"中,读者可以深入理解如何有效地使用PL/SQL与Oracle数据库中的表格进行...

    PL/SQL ORACLE版学习实例

    在PL/SQL中,我们可以创建存储过程、函数、触发器、游标、异常处理等,这些是数据库编程的基础。以下是一些关键知识点的详细介绍: 1. **存储过程**:存储过程是一组预编译的SQL语句和PL/SQL代码,可以在数据库中...

    PL/SQL教程PL/SQL教程

    PL/SQL是一种专为Oracle数据库设计的编程语言,它扩展了标准的SQL,使得开发者能够编写更复杂、更高效的应用程序。PL/SQL已经深深地集成到Oracle服务器及其相关工具中,成为数据库管理和开发的重要组成部分。 PL/...

    pl_sql基本语法例子.rar_SQL2569_oracle_pl/sql_plsql增删改查

    PL/SQL是Oracle数据库系统中的一个重要组成部分,它是一种结合了SQL与过程编程的语言,用于在Oracle环境中编写存储过程、函数、触发器等数据库对象。本资料主要涵盖了PL/SQL的基本语法以及数据的增删改查操作和视图...

    [Oracle Database 10g PL/SQL程序设计]源码

    在Oracle数据库中,PL/SQL被广泛应用于存储过程、函数、触发器以及各种数据库对象的定义中。 源码是学习和实践编程的最佳资源之一,尤其是对于深入理解PL/SQL的工作原理和提高编程技能来说至关重要。《Oracle ...

    绝对好的 oracle pl/sql 编程

    ### 绝对好的 Oracle PL/SQL 编程 #### 一、PL/SQL 程序设计简介 ##### 1.1 SQL 与 PL/SQL **1.1.1 什么是 PL/SQL?** PL/SQL(Procedure Language for SQL)是一种专门为 Oracle 数据库设计的过程化语言。它结合...

    oracle pl/sql by example

    学习《Oracle PL/SQL by Example》时,应先掌握SQL基础知识,包括SELECT语句、表之间的连接、子查询等,然后逐步深入到PL/SQL的世界。书中的每个章节都可以作为独立的学习单元,读者可以根据自己的需求和进度进行...

    《Oracle PL/SQL 实例精解》说明

    PL/SQL,全称Procedural Language/Structured Query Language,是Oracle数据库特有的一种混合了SQL与过程化编程的语言,用于在Oracle环境中编写存储过程、函数、触发器等数据库应用程序。 该书的核心内容可能包括...

    Oracle PLSQL实例精解(原书第4版) 源码下载

    读者可以运行这些脚本来实践书中的例子,从而更好地理解PL/SQL的语法和功能。这不仅提供了实际操作的机会,还能让学习过程更加生动有趣。 3. `StudentSchema.zip`:这个文件名暗示它可能包含一个名为"StudentSchema...

    PL.SQL.By.Example

    通过学习和实践《PL/SQL by Example》中的例子,我们可以掌握以下核心知识点: 1. **基础语法**:了解PL/SQL的基本结构,包括块(BEGIN-END)、声明变量、数据类型(如 NUMBER、VARCHAR2、DATE)以及常量的定义。 ...

    PL/SQL学习资料(.doc)

    ### PL/SQL学习资料知识点详解 #### 一、PL/SQL概述 **1.1 PL/SQL的概念** PL/SQL(Procedural Language for SQL)是Oracle为支持其数据库产品而设计的一种专有的过程化语言。它将SQL命令与过程化语句结合在一起...

    PL/SQL 用户指南 中文版

    PL/SQL,全称Procedural Language/Structured Query Language,是Oracle数据库的一种扩展,它将SQL语句与过程式编程语言结合在一起...建议仔细阅读并实践手册中的例子,以便于深入理解和熟练运用PL/SQL进行数据库开发。

Global site tag (gtag.js) - Google Analytics