ORACLE触发器

(1)触发器有哪些限制
(2)触发器的事务控制是怎样的?
(3)触发器失败时,外部SQL是否会返回错误;如果会,则研究如何不返回错,如果不会,则研究如何会返回错误;
(
答:

(1)在Oracle中,对触发器的限制是:
1、触发器不接受参数。
2、一个表上最多可有12个触发器,但同一时间、同一事件、同一类型的触发器只能有一个。并各触发器之间不能有矛盾。
3、触发器最大为32KB。若确实需要,可以先建立过程,然后在触发器中用CALL语句进行调用。
4、在触发器的执行部分只能用DML语句(SELECT、INSERT、UPDATE、DELETE),不能使用DDL语句(CREATE、ALTER、DROP)
5、触发器中不能包含事务控制语句(COMMIT,ROLLBACK,SAVEPOINT)。因为触发器是触发语句的一部分,触发语句被提交、回退时,触发器也被提交、回退了。
6、 在触发器主体中调用的任何过程、函数,都不能使用事务控制语句。
7、在触发器主体中不能申明任何Long和blob变量。新值new和旧值old也不能指向表中的任何long和blob列

(2)在Oracle中,触发器的事务控制是:

1。触发器与触发该触发器的SQL语句同属于一个事务,它只能随着外部SQL语句事务的提交、回滚而提交、回滚。(但在oracle8i 以及更高的版本中,你可以创建作为自治事务而执行的触发器,在这种情况下,触发器可以做提交或回滚操作,而与触发该触发器的外部SQL所在的事务无关)

(3)触发器失败时,控制外部SQL是否会返回错误:
1、如需外部SQL返回错误信息,触发器不对exception,进行捕捉,或者捕捉后再RAISE错误信息。
2、如不需外部SQL知道触发器是否失败,捕捉exception,不对外RAISE。

触发器语法
 
CREATE [OR REPLACE] TIGGER 触发器名

[before|after] --触发时间

[insert|update|delete] --触发事件

OF 列名
 
ON 表名
 
[FOR EACH ROW]
DECLARE

//定义变量
 
BEGIN
 
   // pl/sql语句
EXCEPTION
   //异常处理
 WHEN OTHERS THEN
         RAISE; //抛出异常给外部SQL
 
END;
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值