1、oracle中触发器中的after和before有什么区别
2、分别用在什么场合
3、还有语句级触发和行级触发有什么区别?
给些实例如果可以运行马上结帖!
2、分别用在什么场合
3、还有语句级触发和行级触发有什么区别?
给些实例如果可以运行马上结帖!
解决方案 »
- Net Configuration Assitant在Server端和Client端的区别
- 如何将.net传入的一个数据集批量插入我的临时表中,急!!!
- 求HQL语句
- 关于PL/SQL连接时间问题
- 很普遍的oracle问题
- 请教关于初始化
- 有什么好工具,能方便可视化,查询、增加、删除Oracle 数据、并能方便地生成Oracle 存储过程、函数、sql语句???
- 请问OracleXMLSave类对要导入的XML文件格式有什么要求(实例说明最好)
- 急问,我把一台机子的Oracle客户端81升到92客户端,升级会不会出现问题?
- 求dmp文件格式,大侠帮忙
- oracle存储过程中二维数组问题
- Pro*C如何安装
一个是在记录操作之前触发,一个是在记录操作之后触发。2、分别用在什么场合
比如表之间定义的有外键,在删除主键时,必须要先删除外键表,这时就有先后之分。3、还有语句级触发和行级触发有什么区别?
如果定义为语句级,则Delete from t执行时,触发器只运行一次,如果定义为行级,则上面的Delete操作将使触器运行多次(有几条记录就运行几次)。
inserting 操作 :new
update 操作 :new,:old ,如果更新某个字段触发使用if updating('col') then ......
delete 操作 :old
before是在语句执行之前执行触发器,after是在语句执行之后再执行触发器的,但两种情况下语句都会执行.
2、分别用在什么场合3、还有语句级触发和行级触发有什么区别?
语句级触发器是在整个语句执行的前或后 执行,而行级是对于一行操作来说的 ,语句级的可以阻止某些语句的执行.
2:比如:
create or replace trigger tri_emp
before inert or update deptno on emp
for each row
when (new.deptno<>40)
begin
:new.comm:=0;
end;
/
这段的意思就是创建或替代tri_emp触发器。
在插入或者更新表emp的每一行的deptno这一列之前如果新的DEPTNO的值不等于四十
然后就执行SQL块里的内容。如果把before换成after的话就是在插入或更新之后做后面的操作.
3:行级触发器是对DML语句影响的每个行执行一次
如update语句影响多行,就会对每行都激活一次触发器。
而语句级触发器是对每个DML语句执行一次
如insert语句在表中插了300多行,那么这个表上的insert语句级触发器只会执行一次。这样说你能明白了不?
已经说的较完整了
专门讲这个的。触发器一般用来保证数据完整性,存储过程据说用来提高复杂逻辑的处理效率,但实际使用中不建议用存储过程,按分层的思想,持久层就不应出现业务逻辑,建议将此部分转移动代码中实现。细节楼上已经说明了,我就不重复了。
几年前的帖子被放在第一页
要不然就是已经结贴的帖子放在第一页
很奇怪
一个是在记录操作之前触发,一个是在记录操作之后触发。 2、分别用在什么场合
比如表之间定义的有外键,在删除主键时,必须要先删除外键表,这时就有先后之分。 3、还有语句级触发和行级触发有什么区别?
如果定义为语句级,则Delete from t执行时,触发器只运行一次,如果定义为行级,则上面的Delete操作将使触器运行多次(有几条记录就运行几次)。
1、触发顺序上有所区别
语句级别触发器before
行级别触发器before
行级别触发器after
语句级别触发器after
2、触发次数区别 语句级别触发器只触发一次、行级触发器是作用了多少行触发多少次。[TEST@ora10gr1#2009-12-18/21:08:09] SQL>create or replace trigger t1_triger_before
2 before insert on t1
3 begin
4 dbms_output.put_line('语句级别触发器before');
5 end;
6 /Trigger created.[TEST@ora10gr1#2009-12-18/21:08:09] SQL>create or replace trigger t1_triger_after
2 after insert on t1
3 begin
4 dbms_output.put_line('语句级别触发器after');
5 end;
6 /Trigger created.[TEST@ora10gr1#2009-12-18/21:08:09] SQL>create or replace trigger t1_triger_before_each_row
2 before insert on t1 for each row
3 begin
4 dbms_output.put_line('行级别触发器before');
5 end;
6 /Trigger created.[TEST@ora10gr1#2009-12-18/21:08:09] SQL>create or replace trigger t1_triger_after_each_row
2 after insert on t1 for each row
3 begin
4 dbms_output.put_line('行级别触发器after');
5 end;
6 /Trigger created.[TEST@ora10gr1#2009-12-18/21:08:09] SQL>
[TEST@ora10gr1#2009-12-18/21:08:09] SQL>set serveroutput on
[TEST@ora10gr1#2009-12-18/21:08:09] SQL>--注意触发顺序
[TEST@ora10gr1#2009-12-18/21:08:09] SQL>insert into t1 values(1,'a');
语句级别触发器before
行级别触发器before
行级别触发器after
语句级别触发器after1 row created.[TEST@ora10gr1#2009-12-18/21:08:09] SQL>--注触发发次数
[TEST@ora10gr1#2009-12-18/21:08:09] SQL>insert into t1
2 select 1,'a' from dual union all
3 select 2,'b' from dual union all
4 select 3,'c' from dual;
语句级别触发器before
行级别触发器before
行级别触发器after
行级别触发器before
行级别触发器after
行级别触发器before
行级别触发器after
语句级别触发器after3 rows created.
已经说的较完整了