触发器,函数,包都是可以再生利用的东西,所以在创建的时候都要用到create or replace这个万能语句,接着就是主角trigger的出现了,主角出现还需要一点点波动,通常大人物都不是随随便便就显现的,所以要配上before [after] insert[update/delete] on tableName.

create or replace

      trigger is tri_update[/insert/delete/UID]_tableName

             before[after]  insert[update/delete/or 。。。] on  tableName

      [for each row]--这个一般都要加上,因为我们一般都是行级触发器,即对每一行都操作

      [declare

         locateParamater1 type;

        locateParamater1 type;]

      --又见begin...end;

      begin

        --do something;

      end;

(1)关于new和old,在使用之前联系实际想一想吧,insert的时候肯定没有old啊,delete的时候肯定没有new啊,只有update的时候old和new同时拥有,还要指出的是new和old都是rowtype的,即可以代表相应的一行。对于new和old的实际用法,请看实例。

(2)对于when的时候,要注意里面的old和new,没有冒号。还有在写raise_application_error的时候要注意他的参赛格式(number,‘Some thing you want to say’),其中的number是从-20000到-20999

/*完成:
、当向SC表插入数据时,修改(或添加)SC_NUMBER(包括学生学号和选课门数两列)表格中的数据。*/ create or replace
trigger tr_Insert_Sc after insert on sc
for each row
begin
--insert 的时候使用:new
update SC_Number set ccount=ccount+1 where SC_Number.Sno=:new.Sno;
end;
/*
、当删除SC表中数据时,修改(或添加)SC_NUMBER中的数据。*/
insert into sc values('','C01','');
delete from sc where sno='' and cno='C01'
select * from sc where sno=''
select * from SC_Number;
create or replace
trigger tr_Delete_Sc after delete on sc
for each row
begin
update SC_Number set ccount=ccount-1 where SC_Number.Sno=:old.Sno;
end;
/*
、当修改SC表中数据时,若修改的是学号,则对应修改SC_NUMBER表中的选课门数,
否则打印“某某(学生姓名)的学生选课信息已经修改”信息。*/
insert into sc values('','C01','');
delete from sc where sno='' and cno='C01'
select * from sc where sno=''
select * from sc where sno=''
select * from SC_Number;
update sc set sno='' where sno=''
update sc set grade=90 where sno='' and cno='C06'
create or replace
trigger tr_Edit_SC after update on SC
for each row
declare
student_name student.sname%type;
begin
if :new.sno=:old.sno then
select sname into student_name from student where student.sno=:new.sno;
dbms_output.put_line(student_name||'Have changed');
end if;
if :new.sno<>:old.sno then
update SC_Number set ccount=ccount-1 where SC_Number.Sno=:old.Sno;
update SC_Number set ccount=ccount+1 where SC_Number.Sno=:new.Sno;
end if;
end; /* 1、修改STUDENT表数据时,限制不能修改学生的系别(不能修改CS系学生的系别)。*/
select * from student;
update student set student.sname='XXX' where student.sno='';
create or replace
trigger tr_Edit_Student_cons before update on student
for each row
when(old.sdept='CS')
begin
raise_application_error(-20044,'You Cannot edit the information of cs department');
end;
/*2、插入课程时,课程号以‘S’开头的课程的学分不能低于3分。*/
insert into course values('S01','Oracle',3,4)
delete from course where course.cno='S01';
select * from course;
create or replace
trigger tr_Edit_Course_cons before insert on course
for each row
when(new.credit<=5 and new.cno like 'S%')
begin
raise_application_error(-20023,'You can not insert the course name ');
end; /*
、不能删除90分以上学生的选课信息。*/
update sc set grade=98 where sno='' and cno='C10'
delete from sc where sno='' and cno='C10'
select * from sc;
create or replace
trigger tr_delete_SC before delete on SC
for each row
when(old.grade>90)
begin
raise_application_error(-20017,'My grade beyond 90,You cannot delete me');
end; /*
插入Student表中数据时,CS系学生的年龄不能大于30岁。*/
select * from student;
insert into student values('','Shawn',21,'m','CS');
delete from student where student.sno='';
create or replace
trigger tr_insert_Student before insert on student
for each row
when(new.sdept='CS' and new.sage>30)
begin
raise_application_error(-20078,'I am a Cs student.My age should little than 30');
end; /* 当修改Student表中的年龄字段时,使其只能增加,不能减少。*/
select * from student;
update student set sage=38 where sno=''
create or replace
trigger tr_update_Student before update on student
for each row
when(new.sage<old.sage)
begin
raise_application_error(-20089,'Only can beyond the old age!');
end;
/* 删除Student表中的学生信息时,判断在SC表中该学生的平均成绩是否高于60,若高于60,
则不能删除,否则允许删除,同时删除SC表该学生对应的选课信息。*/
select round(avg(grade),2),sno from sc group by sno
delete from student where student.sno=''
select * from sc select * from student where student.sno=''
create or replace
trigger tr_delete_student_cons before delete on student
for each row
declare
avg_score number(4,2);
begin
select round(avg(grade),2) into avg_score from sc where sc.sno=:old.sno;
if avg_score>70.00 then
raise_application_error(-20058,'My average score beyond 60!!!!');
else
delete from sc where sc.sno=:old.sno;
end if; end;

Oracle触发器使用介绍的更多相关文章

  1. oracle触发器加条件判断

    oracle触发器加条件判断,如果某个字段,isnode=0,那么不执行下面的方法,数据如下: create or replace trigger tr_basestation_insert_emp ...

  2. Oracle 触发器在日志管理开发中的应用

    摘要: 本文讨论了利用数据库中的触发器对日志管理进行设计与实现的方法, 是对原来在客户端软件中编写日志管理方法的一种改进, 并给出了 Oracle9i 中的实例演示.关键词: Oracle; 触发器; ...

  3. oracle触发器应用

    首先给大家推荐两篇我看后的博文,我已经内容转载过来: 1.对触发器的讲解 本篇主要内容如下: 8.1 触发器类型 8.1.1 DML触发器 8.1.2 替代触发器 8.1.3 系统触发器 8.2 创建 ...

  4. Oracle触发器用法实例详解

    转自:https://www.jb51.net/article/80804.htm. 本文实例讲述了Oracle触发器用法.分享给大家供大家参考,具体如下: 一.触发器简介 触发器的定义就是说某个条件 ...

  5. 问题:Oracle出发器;结果:1、Oracle触发器详解,2、Oracle触发器示例

    ORACLE触发器详解 本篇主要内容如下: 8.1 触发器类型 8.1.1 DML触发器 8.1.2 替代触发器 8.1.3 系统触发器 8.2 创建触发器 8.2.1 触发器触发次序 8.2.2 创 ...

  6. [转载]Oracle触发器用法实例详解

    本文实例讲述了Oracle触发器用法.分享给大家供大家参考,具体如下: 一.触发器简介 触发器的定义就是说某个条件成立的时候,触发器里面所定义的语句就会被自动的执行. 因此触发器不需要人为的去调用,也 ...

  7. 2014/11/06 Oracle触发器初步 2014-11-06 09:03 49人阅读 评论(0) 收藏

    触发器我就不多解释了,保证数据的完整性的神器,嗯..也是减少程序员工作托管给数据库操作的好帮手.就不讲一些大道理了.通俗点,我们对数据库的操作,无非就是增 删 改 查. 触发器就是在删,改,增的时候( ...

  8. [转]连续创建多个Oracle触发器失败,单个创建才成功的解决方法

    连续创建多个Oracle触发器失败,单个创建才成功的解决方法   1.当我连续执行创建多个触发器时,总是报编译通过,但存在警告或错误.如下:   create or replace trigger t ...

  9. Oracle优化器介绍

    Oracle优化器介绍 本文讲述了Oracle优化器的概念.工作原理和使用方法,兼顾了Oracle8i.9i以及最新的10g三个版本.理解本文将有助于您更好的更有效的进行SQL优化工作. RBO优化器 ...

随机推荐

  1. javaee学习之servlet

    一.tomcat相关知识 tomecat虚拟主机与虚拟路径 1.tomcat的应用默认放在webapps目录下面,可以将其放在其他目录分区,让tomcat进行管理吗? 答:当然可以.方法:配置虚拟目录 ...

  2. linux:档案权限

    一.例如:-rw-r--r--.  1 root root  129 Dec 29  2013 .tcshrc 详细: 1.-rw-r--r--:档案类型和权限(总共十个栏位) 1.1:第一个栏位代表 ...

  3. [phonegap]安装phonegap

    下载nodejs,安装,单nodejs4.0.0 x64编译时,还需要python2.6 or python2.7: 参考怎么安装python2.7:            http://jingya ...

  4. UML: 部署图

    说部署图之前,先看看某24小时便利店管理系统的网络拓扑结构图: 这个图描述了本系统的整体物理结构,从该图我们可以得到以下信息:1.该便利店集团有总部和多个门店,总部管理财务.仓库.采购等事宜.2.二级 ...

  5. eclipse中修改maven仓储

    1.找到maven的setting文件,修改setting文件: 2.打开eclipce,window->Preference->maven->user Setting

  6. Mysql索引介绍及常见索引(主键索引、唯一索引、普通索引、全文索引、组合索引)的区别

    Mysql索引概念:说说Mysql索引,看到一个很少比如:索引就好比一本书的目录,它会让你更快的找到内容,显然目录(索引)并不是越多越好,假如这本书1000页,有500也是目录,它当然效率低,目录是要 ...

  7. SPOJ COT3 Combat on a tree(Trie树、线段树的合并)

    题目链接:http://www.spoj.com/problems/COT3/ Alice and Bob are playing a game on a tree of n nodes.Each n ...

  8. 。。。HibernateTemplate与Session。。。

    今天在学习Spring框架的时候,突然发现了这个类----HibernateTemplate,这个类与Session一开始认为是差不多的,这个HibernateTemplate类对象拥有Session ...

  9. 解决maven编译spark1.5报错问题

    spark1.5发布了,赶紧去下了源码尝鲜 git clone git://github.com/apache/spark.git -b branch-1.5 输入命令进行编译 ./make-dist ...

  10. qlserver、Mysql、Oracle三种数据库的优缺点总结

    这篇文章主要介绍了sqlserver.Mysql.Oracle三种数据库的优缺点总结,需要的朋友可以参考下   一.sqlserver优点:易用性.适合分布式组织的可伸缩性.用于决策支持的数据仓库功能 ...