过去做项目。都是前端后台的编码。因为数据库都让项目经理给写好的。自己对于数据库并没有多少优化,时间久了,反而把数据库的知识给淡忘了,最近的项目用到的是Oracle数据库,大家都知道,用到这个数据库,就是数据量比较大的项目了。对于优化就有必要了。因此自己下班后抽空复习一下,并把这个记录下来,不只是分享给大家,还能以后自己再次复习。若我讲得不对,请留言更正,本人会虚心接受并改更,这样才能进步。
create trigger saynewemp //创建一个触发器 saynewemp是触发器的名字 after insert //执行插入方法后触发 on emp //针对是哪个表 declare //声明 begin //开始 dbms_output.put_line("成功插入新员工") //触发时打印一句话 end; //结果一个员工表的插入触发器就写好了。只要我们对员工表执行insert插入操作后,就会执行触发器中的行为,如上所示,会自动打印一句话。
CREATE[or REPLACE]TRIGGER 触发器的名字 //创建一个触发器 {BEFORE|AFTER} //触发器执行的顺序,是方法前还是方法后执行 {DELETE|INSERT|UPDATE(OF 列名)} //给哪个方法设置触发器,在UPDATE方法中,可以用OF指明哪一列名 ON 表名 //哪个表 [FOR EACH ROW[WHEN(条件)]] //如果有FOR EACH ROW,那就是行级触发器,反之,就是语句触发器 PLSQL块 //执行块语句级触发器:在指定的操作语句操作之前或之后执行一次,不管这条语句影响了多少行,只执行一次。行级触发器:触发语句作用的每一条记录都被触发,在行级触发器中使用 :old 和 :new伪记录变量,识别值的状态 是不是很抽象呢,其实大家从名字就可以清楚知道他们的分别。我在下面举例说明吧。 例子:我们要在把员工表中的一个字段数据(有三条)插入到新的一个表中,
INSERT INTO EMP10 SELECT * FROM EMP WHERE NAME = 10;
如果是语句级触发器的话,只触发一次,因为语句级触发器:针对的是表, 而行级触发器,前面也说了,是三条记录,自然会触发三次行级触发器,也就是,针对的是行。就如前面的语法中,行级触发器FOR EACH ROW 语句,后面也可以加WHEN的条件,可以指定哪一行。