触发器,函数,包都是可以再生利用的东西,所以在创建的时候都要用到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. instancetype

  2. ios之无限 自动 图片轮播器的实现

    比较之前发布的手动无限图片轮播器进行了改进.实现了自动无限轮播的功能.比较适合团购标题分类下面的轮播器功能. 实现思路: * 开启一个定时器,把操作放入消息循环池.每隔一定时间,操作执行一次. * 注 ...

  3. java.net.ConnectException: Connection refused: connect

    在dos命令里输入netstat 查看下serverSocket所监听的端口有没有存在.

  4. wampserver环境下,安装ucenter1.6.0

    1,)从官网下载UCenter_1.6.0_SC_UTF8.zip,解压拷贝upload到www下,重命名upload->ucenter; 2,)D:\wamp\bin\apache\Apach ...

  5. Leetcode: Elimination Game

    There is a list of sorted integers from 1 to n. Starting from left to right, remove the first number ...

  6. Lintcode: Sort Letters by Case

    Given a string which contains only letters. Sort it by lower case first and upper case second. Note ...

  7. A letter to a good guy in USA

    Hi Nick:Busy recently forgetting to check Yammer in box.Really nice of you to agree to provide help ...

  8. POJ 2947 Widget Factory(高斯消元)

    Description The widget factory produces several different kinds of widgets. Each widget is carefully ...

  9. so baby come on~~

    http://www.cnblogs.com/mfryf/archive/2013/05/17/3083895.html

  10. 13---Net基础加强

    更新中,敬请期待............ 作业-复习 程序集1 程序集2 反射1 反射2 反射3 反射4-记事本插件1 反射5-记事本插件2