`
lixin_2002
  • 浏览: 21411 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

PL/SQL复习十三 触发器

阅读更多

注意:1、触发器的大小不能超过32K,如果确实需要建立触发器,应该先建立存储过程,然后在触发器中调用

     2、触发器只能包含select、insert、update和delete语句,而不能包含DDL语句和事务控制语句

     3、触发器代码不能从触发器所对应的基表中读取数据

语句级触发器:

create or replace trigger tr_sec_emp

before insert or update or delete on emp

begin

  if to_char(sysdate,'DY','nls_date_language=AMERICAN') in('SAT','SUN') then

    case

      when inserting then

        raise_application_eroor(-20001,'不能在休息日增加雇员');

      when updating then

        raise_application_error(-20002,'不能在休息日更新雇员');

      when deleting then

        raise_application_eroor(-20003,'不能在休息日删除雇员');

    end case;

  end if;

end;

/


行级触发器:

create or replace trigger tr_emp_sal

before update of sal on emp

for each row

begin

  if :new.sal < :old.sal then

    raise_application_error(-20010,'工资只涨不降');

  end if;

end;

/


限制行级触发器:

create or replace trigger tr_sal_change

after update of sal on emp

for each row

when (old.job = 'SALESMAN')  --用when限制触发条件

declare

  v_temp int;

begin

  select count(*) into v_temp from audit_emp_change where name = :old.ename;

  if v_temp = 0 then

    insert into audit_emp_change values (:old.ename,:old.sal,:new.sal,sysdate);

  else

    update audit_emp_change set oldsal = :old.sal,newsal = :new.sal,time=sysdate

    where name = :old.ename;

  end if;

end;

/


---------------------------------------------------------------------------------------------


机遇复杂视图的触发器:

grant create view to lixin;--授权建立视图

--建立视图

create or replace view dept_emp as select a.deptno,a.dname,b.empno,b.ename

from dept a, emp b where a.deptno = b.deptno;

--建立触发器:

create or replace trigger tr_instead_of_dept_emp

instead of insert on dept_emp --关键字,只能针对视图

for each row --只能是行级

declare

  v_temp int;

begin

  select count(*) into v_temp from dept where deptno= :new.deptno;

  if v_temp = 0 then

    insert into dept(deptno,dname) values(:new.deptno,:new.dname);

  end if;

  select count(*) into v_temp from emp where empno =:new.empno;

  if v_temp = 0 then

    insert into emp(empno,ename,deptno) values(:new.empno,:new.ename,:new.deptno);

  end if;

end;

/


---------------------------------------------------------------------------------------------

管理触发器:

查看:select * from user_triggers;

禁用:SQL> alter trigger TR_EMP_SAL disable;

启用:SQL> alter trigger TR_EMP_SAL enable;

禁用表的所有触发器:SQL> alter table emp disable all triggers;

重新编译:SQL> alter trigger TR_EMP_SAL compile;

删除:SQL> drop trigger TR_CHECK_SAL;

 

分享到:
评论

相关推荐

    PL/SQL基础

    Oracle PL/SQL是一种在Oracle数据库环境中用于开发存储过程、函数、触发器和其他数据库对象的编程语言。它是SQL的扩展,提供了更高级别的控制结构和流程逻辑,使得数据库管理与应用程序开发更加灵活和强大。 PL/SQL...

    oracle复习笔记之PL/SQL程序所要了解的知识点

    PL/SQL程序由声明、执行和异常处理三部分组成。声明部分定义变量、游标和数据类型;执行部分是程序的主要逻辑;异常处理部分则用于捕获并处理可能出现的错误。 2. 记录类型: 记录类型允许我们创建自定义的数据结构...

    oracle第一天练习

    触发器则是在特定数据库事件(如INSERT、UPDATE、DELETE)发生时自动执行的PL/SQL代码。 "procday01"可能包含以下内容: 1. 学习创建简单的存储过程和函数,理解如何定义输入输出参数。 2. 理解PL/SQL的流程控制...

    plsql中文

    2. 1Z0-007 Note.doc:1Z0-007是Oracle Certified Associate, Oracle Database 12c Administrator Certified Professional的考试代码,这个文档可能是针对该考试的复习笔记或学习指南,包含PL/SQL部分的要点,如数据...

    我们公司的内部oracle开发课件(我的珍藏)

    Oracle开发不仅涉及到SQL语言的使用,还包括PL/SQL编程、数据库设计、性能优化等多个方面。1000.jpg可能是一张包含关键概念或流程图的图片,用于辅助理解复杂的Oracle架构或操作步骤。新建 Microsoft PowerPoint ...

    大型数据库系统复习题.doc

    总共包括十五章的复习题: 第一章 Oracle 11g 介绍 第二章 ORACLE 11g 的体系结构 第三章 ORACLE 11g 的数据库管理 第四章 ORACLE 11g 的表空间管理 第五章 ORACLE 11g 的表管理 第六章 ORACLE 11g 的数据查询 第七...

    oracle复习资料

    oracle PL/sql语言复习资料,很全的oracle函数,sql语句,以及游标,存储过程,触发器等复习资料.

    Oracle期末考试复习资料1

    2. PL/SQL程序设计:如触发器、过程和函数。 这些知识点构成了Oracle数据库管理的基础,对于学习者来说,理解和熟练掌握这些概念及操作是通过期末考试的关键。在复习过程中,应结合实际案例进行练习,以加深理解并...

    Oracle面试复习(一)

    4. **PL/SQL**:Oracle的编程语言PL/SQL是SQL的扩展,用于创建存储过程、函数、触发器等。面试可能会涉及到编写和解释PL/SQL代码,处理异常,以及如何使用游标。 5. **性能优化**:Oracle面试通常会涵盖如何诊断和...

    Oracle复习考试题

    5. **PL/SQL编程**:理解PL/SQL的语法结构,包括变量声明、流程控制语句(IF、CASE、LOOP等)、异常处理等。重点掌握存储过程、函数的定义与调用,以及包的使用,了解如何封装逻辑和复用代码。 6. **触发器定义**:...

    oracle复习

    **触发器**是在特定事件发生时自动执行的PL/SQL代码块,分为行级触发器和语句级触发器,以及BEFORE和AFTER触发器。 #### 九、数据视图与动态性能视图 数据视图提供了对数据库物理结构的洞察,而**动态性能视图**则...

    oracle

    7. **触发器**:在特定数据库事件(如插入、更新或删除)发生时自动执行的PL/SQL代码。 8. **事务管理**:确保数据一致性,通过COMMIT提交更改,ROLLBACK回滚未完成的事务。 9. **权限和角色**:控制用户对数据库...

    OCP061、062、063题库

    OCP061、062、063指的是Oracle Certified Professional考试的三个不同部分,这些题目通常涵盖Oracle数据库管理、SQL语言、性能优化、备份恢复等多个关键领域。 OCP061(Oracle Database Administration I)主要知识...

    OCP题库

    3. **PL/SQL编程**:PL/SQL是Oracle的专用过程语言,用于编写存储过程、函数、触发器等。你需要熟悉PL/SQL的语法,变量声明,流程控制结构,异常处理,游标,以及如何使用PL/SQL与SQL交互。 4. **数据库安全管理**...

    数据库开发技术复习.ppt

    数据库开发技术是IT领域...触发器是在特定事件发生时自动执行的PL/SQL代码,用于实现业务规则。 以上内容构成了数据库开发技术的核心,理解和熟练运用这些知识将有助于在实际项目中有效地设计、实现和管理数据库系统。

    oracle认证试题2

    在Oracle认证中,理解并能熟练使用PL/SQL编写存储过程、函数、触发器等是必备技能。 "1Z0-007.pdf"、"1Z0-007-blue.pdf"和"1z0-007v4[1][1].1.pdf"可能代表不同版本或形式的Oracle OCA或OCP考试的1Z0-007部分,这个...

    Oracle ppt

    5. **第五章 PL/SQL基础**:PL/SQL是Oracle专有的过程式语言,用于处理数据库任务。这一章可能包括PL/SQL的语法、变量、流程控制语句、异常处理等基础知识,为后续的进阶学习打下基础。 6. **第六章 游标和异常管理...

Global site tag (gtag.js) - Google Analytics