注意: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;
分享到:
相关推荐
Oracle PL/SQL是一种在Oracle数据库环境中用于开发存储过程、函数、触发器和其他数据库对象的编程语言。它是SQL的扩展,提供了更高级别的控制结构和流程逻辑,使得数据库管理与应用程序开发更加灵活和强大。 PL/SQL...
PL/SQL程序由声明、执行和异常处理三部分组成。声明部分定义变量、游标和数据类型;执行部分是程序的主要逻辑;异常处理部分则用于捕获并处理可能出现的错误。 2. 记录类型: 记录类型允许我们创建自定义的数据结构...
触发器则是在特定数据库事件(如INSERT、UPDATE、DELETE)发生时自动执行的PL/SQL代码。 "procday01"可能包含以下内容: 1. 学习创建简单的存储过程和函数,理解如何定义输入输出参数。 2. 理解PL/SQL的流程控制...
2. 1Z0-007 Note.doc:1Z0-007是Oracle Certified Associate, Oracle Database 12c Administrator Certified Professional的考试代码,这个文档可能是针对该考试的复习笔记或学习指南,包含PL/SQL部分的要点,如数据...
Oracle开发不仅涉及到SQL语言的使用,还包括PL/SQL编程、数据库设计、性能优化等多个方面。1000.jpg可能是一张包含关键概念或流程图的图片,用于辅助理解复杂的Oracle架构或操作步骤。新建 Microsoft PowerPoint ...
总共包括十五章的复习题: 第一章 Oracle 11g 介绍 第二章 ORACLE 11g 的体系结构 第三章 ORACLE 11g 的数据库管理 第四章 ORACLE 11g 的表空间管理 第五章 ORACLE 11g 的表管理 第六章 ORACLE 11g 的数据查询 第七...
oracle PL/sql语言复习资料,很全的oracle函数,sql语句,以及游标,存储过程,触发器等复习资料.
2. PL/SQL程序设计:如触发器、过程和函数。 这些知识点构成了Oracle数据库管理的基础,对于学习者来说,理解和熟练掌握这些概念及操作是通过期末考试的关键。在复习过程中,应结合实际案例进行练习,以加深理解并...
4. **PL/SQL**:Oracle的编程语言PL/SQL是SQL的扩展,用于创建存储过程、函数、触发器等。面试可能会涉及到编写和解释PL/SQL代码,处理异常,以及如何使用游标。 5. **性能优化**:Oracle面试通常会涵盖如何诊断和...
5. **PL/SQL编程**:理解PL/SQL的语法结构,包括变量声明、流程控制语句(IF、CASE、LOOP等)、异常处理等。重点掌握存储过程、函数的定义与调用,以及包的使用,了解如何封装逻辑和复用代码。 6. **触发器定义**:...
**触发器**是在特定事件发生时自动执行的PL/SQL代码块,分为行级触发器和语句级触发器,以及BEFORE和AFTER触发器。 #### 九、数据视图与动态性能视图 数据视图提供了对数据库物理结构的洞察,而**动态性能视图**则...
7. **触发器**:在特定数据库事件(如插入、更新或删除)发生时自动执行的PL/SQL代码。 8. **事务管理**:确保数据一致性,通过COMMIT提交更改,ROLLBACK回滚未完成的事务。 9. **权限和角色**:控制用户对数据库...
OCP061、062、063指的是Oracle Certified Professional考试的三个不同部分,这些题目通常涵盖Oracle数据库管理、SQL语言、性能优化、备份恢复等多个关键领域。 OCP061(Oracle Database Administration I)主要知识...
3. **PL/SQL编程**:PL/SQL是Oracle的专用过程语言,用于编写存储过程、函数、触发器等。你需要熟悉PL/SQL的语法,变量声明,流程控制结构,异常处理,游标,以及如何使用PL/SQL与SQL交互。 4. **数据库安全管理**...
数据库开发技术是IT领域...触发器是在特定事件发生时自动执行的PL/SQL代码,用于实现业务规则。 以上内容构成了数据库开发技术的核心,理解和熟练运用这些知识将有助于在实际项目中有效地设计、实现和管理数据库系统。
在Oracle认证中,理解并能熟练使用PL/SQL编写存储过程、函数、触发器等是必备技能。 "1Z0-007.pdf"、"1Z0-007-blue.pdf"和"1z0-007v4[1][1].1.pdf"可能代表不同版本或形式的Oracle OCA或OCP考试的1Z0-007部分,这个...
5. **第五章 PL/SQL基础**:PL/SQL是Oracle专有的过程式语言,用于处理数据库任务。这一章可能包括PL/SQL的语法、变量、流程控制语句、异常处理等基础知识,为后续的进阶学习打下基础。 6. **第六章 游标和异常管理...