涉及到表的处理请参看原表结构与数据  Oracle建表插数据等等

创建一个触发器,使其可以修改tb_Department表的deptno。

create or replace trigger update_dept
after update on deptno
for each row
begin
update tb_Department set deptno=:new.deptno where deptno=:old.deptno;
end;
/

建立一个语句级触发器,防止在非工作时间对于某个表的更新,插入和删除

create or replace trigger tr_dept_time
before insert or delete or update
on tb_Department
begin
if(to_char(sysdate, 'DAY') in ('星期六', '星期日')) or
(to_char(sysdate, 'HH24:MI') not between '08:00' and '18:00')
then
raise_application_error(-20001, '非工作时间,不能对tb_Department修改');
end if;
end;
/
select trigger_name, trigger_type from user_triggers
where table_name = 'tb_Department';

在tb_Department表中加入一个列,用于统计部门的总工资,在tb_Employee表上建立一个行级触发器,用于同步这个数据

alter table tb_Department add  sum_salary number(10) default 0;
declare
sum_sal tb_Employee.salary % type;
cursor dep_sal_cur is
select deptno,sum(sal) as sum_sal
from tb_Employee
group by deptno;
begin
for dep_sal in dep_sal_cur loop
update tb_Department
set sum_salary = dep_sal.sum_sal
where deptno = dep_sal.deptno;
end loop;
end;
create or replace trigger tri_emp_dep
after insert or delete or update of sal
on tb_Employee
for each row
begin
dbms_output.put_line('行触发器执行');
update departments
set sum_salary = sum_salary + nvl(:new.salary, 0) - nvl(:old.salary, 0);
end;
/

使用序列和触发器,给流水号列自动添加流水号。

create sequence seq_table1
start with 1
increment by 1
maxvalue 9999999;
create table table1(num1 number, name1 varchar2(20));
create or replace trigger trg_table1
before insert on table1
for each row
declare
begin
select seq_table1.nextval into :new.num1 from dual;
end;
/

在一个多事件的触发器中,使用条件谓词,对插入,删除,更新进行不同的处理。

create or replace trigger mul_event_tri
after insert or delete or update on table1
begin
case
when inserting then
dbms_output.put_line('data has been inserted');
when deleting then
dbms_output.put_line('data has been deleted');
when updating then
dbms_output.put_line('data has been updated');
end case;
end;
/

建立一个审计表,把某个表更新,插入,删除的数据,通过行级触发器,记录到审计表,需要记录更新前后数据的变化,操作的类型和时间。

create table audit_table1(
old_num number,
new_num number,
old_name varchar2(20),
new_name varchar2(20),
op_type varchar2(20),
op_date varchar2(20)
); create or replace trigger audit_tri
before update or insert or delete
on table1
for each row
declare
str varchar2(20);
begin
case
when updating then
str := 'update';
when inserting then
str := 'insert';
when deleting then
str := 'delete';
end case;
insert into audit_table1 values(
:old.num1, :new.num1, :old.name1, :new.name1, str,
to_char(sysdate) || ' ' || to_char(sysdate, 'HH24:MI'));
end;
/
-- test --
insert into table1 values(17, 'TFJ');
select * from table1;
select * from audit_table1;
-- test --

Oracle系列之触发器的更多相关文章

  1. Oracle系列:触发器、作业、序列、连接

    .Net程序员学用Oracle系列(8):触发器.作业.序列.连接   1.触发器 2.作业 2.1.作业调度功能和应用 2.2.通过 DBMS_JOB 来调度作业 3.序列 3.1.创建序列 3.2 ...

  2. .Net程序员学用Oracle系列(8):触发器、任务、序列、连接

    <.Net程序员学用Oracle系列:导航目录> 本文大纲 1.触发器 1.1.创建触发器 1.2.禁用触发器 & 启用触发器 & 删除触发器 2.任务 2.1.DBMS_ ...

  3. .Net程序员学用Oracle系列(25):触发器详解

    1.触发器理论 1.1.触发器的应用场景 1.2.触发器的类型 1.3.DML 触发器的触发顺序 2.触发器实战 2.1.创建触发器 2.1.1.创建 DML 触发器 2.1.2.创建 DDL 触发器 ...

  4. .Net程序员学用Oracle系列(8):触发器、作业、序列、连接

    1.触发器 2.作业 2.1.作业调度功能和应用 2.2.通过 DBMS_JOB 来调度作业 3.序列 3.1.创建序列 3.2.使用序列 & 删除序列 4.连接 4.1.创建连接 4.2.使 ...

  5. .Net程序员学用Oracle系列(6):表、字段、注释、约束、索引

    <.Net程序员学用Oracle系列:导航目录> 本文大纲 1.表 1.1.创建表 1.2.修改表 & 删除表 2.字段 2.1.添加字段 2.2.修改字段 & 删除字段 ...

  6. .Net程序员学用Oracle系列(7):视图、函数、过程、包

    <.Net程序员学用Oracle系列:导航目录> 本文大纲 1.视图 1.1.创建视图 2.函数 2.1.创建函数 2.2.调用函数 3.过程 3.1.创建过程 3.2.调用过程 4.包 ...

  7. .Net程序员学用Oracle系列(28):PLSQL 之SQL分类和动态SQL

    1.SQL 语句分类 1.1.分类方法及类型 1.2.数据定义语言 1.3.数据操纵语言 1.4.其它语句 2.动态 SQL 理论 2.1.动态 SQL 的用途 2.2.动态 SQL 的语法 2.3. ...

  8. .Net程序员学用Oracle系列(7):视图、函数、存储过程、包

    1.视图 1.1.创建.删除及调用普通视图 1.2.高级视图介绍 2.函数 2.1.系统函数介绍 2.2.创建.删除及调用自定义函数 3.存储过程 3.1.创建.修改及删除存储过程 3.2.调用存储过 ...

  9. 【转】Oracle系列导航目录

    .Net程序员学用Oracle系列(1):导航目录 .Net程序员学用Oracle系列(2):准备测试环境 .Net程序员学用Oracle系列(3):数据库编程规范 .Net程序员学用Oracle系列 ...

随机推荐

  1. IIS7 发现无法显示ewebeditor编辑器成空白

    vs2003写的网站,很早了,编辑器用的是ewebeditor,每次更换程序编辑器都会出问题.今天记录一下. 内部老网站在Windows2003 iis6上运行的. 现在要迁移到2008上64位.08 ...

  2. Gulp实战(二)

    一.配置环境 1.基于NodeJs安装Git,npm,gulp 2.安装各类插件 3.参考文档 http://www.tuicool.com/articles/UbaqyyJ http://www.t ...

  3. java培训(5-8节课)

    面向对象: 1.利用面向对象的语法,实现代码的拆分(数据存储:对象的传值). 2.利用面向对象的语法,实现程序的结构处理(继承,多态,接口,抽象类). 3.用面向对象的编程方法,理解实现程序开发的框架 ...

  4. virtual析构函数的作用

    C++ Primter中讲“在 C++ 中,基类必须指出希望派生类重写哪些函数,定义为 virtual 的函数是基类期待派生类重新定义的,基类希望派生类继承的函数不能定义为虚函数”. 析构函数是为了在 ...

  5. C++ IO 详细用法

    http://www.cnblogs.com/keam37/ keam所有 转载请注明出处 本文将分别从<iostream>,<sstream>,<fstream> ...

  6. 九度OJ 1499 项目安排 -- 动态规划

    题目地址:http://ac.jobdu.com/problem.php?pid=1499 题目描述: 小明每天都在开源社区上做项目,假设每天他都有很多项目可以选,其中每个项目都有一个开始时间和截止时 ...

  7. 【JSP&Servlet学习笔记】4.会话管理

    Http本身是无状态通信协议,要进行会话管理的基本原理,就是将需要维护的状态回应给浏览器,由浏览器在下次请求时主动发送状态信息,让Web应用程序“得知”请求之间的关联. 隐藏字段是将状态信息以窗体中看 ...

  8. Java Web开发之Servlet、JSP基础

    有好多年不搞Java Web开发了,这几天正好国庆放假,放松之余也有兴趣回头看看Java Web开发技术的基础. 我们都知道,Servlet是Java Web开发的重要基础,但是由于Servlet开发 ...

  9. PHP学习心得(一)——简介

    PHP(“PHP: Hypertext Preprocessor”,超文本预处理器的字母缩写)是一种被广泛应用的开放源代码的多用途脚本语言,它可嵌入到 HTML中,尤其适合 web 开发. PHP 脚 ...

  10. 基于C#的SolidWorks插件开发(1)--SolidWorks API接口介绍

    这是两年前毕业时写的一篇关于SolidWorks插件开发与公司PDM集成的毕业设计,最近闲来无事拿出来整理一下,大神们可以略过. 1.1   SolidWorks API接口 正确调用SolidWor ...