oracle11g – Oracle存储过程中触发器和语句的执行顺序

前端之家收集整理的这篇文章主要介绍了oracle11g – Oracle存储过程中触发器和语句的执行顺序前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
以下是我的表格结构:
Table -Customer
CustomerID Blacklisted Customer Name
101 Y ABC
102 Y DEF

Table -Blacklist
CustomerID BlacklistID Customer Name
101 1011 ABC
102 1012 DEF

Table -Reason
BlacklistID ReasonID Reason Code
1012 02 Rcode2

主表“客户”是存储客户信息.如果有人在客户表中将黑名单更新为Y,则在“客户”表上更新后会触发记录在“黑名单”表中.
如果,我们认为客户被列入黑名单

>将Customer表中的列列为值’Y’和.
>黑名单和原因表中有客户记录

现在我的要求是将客户从后端列入黑名单.为此我正在使用以下查询编写存储过程:

>更新客户设置blacklisted =’Y’,其中customerid =’102′;
>从blacklist中选择BlacklistID到var_id中,其中customerid =’102′;
>插入原因(BlacklistID,ReasonID,ReasonCode)值(var_ id,111,’RCODE1′);

现在要在Reason表中插入条目(步骤3),我需要BlacklistID这是一个外键,一旦客户表上的触发器得到规定,我将得到BlacklistID的值.所以我的困惑是,我可以假设触发更新在cntrl到达我的INSERT INTO reason(步骤3)语句之前,’Customer’表总是会被执行.请建议.

是.触发器是声明的一部分.虽然您无法完全确定执行同一语句中多个触发器的顺序,但您可以确定它们是在语句本身完成时完成的.因此,到第2步时,第1步的所有更新触发器都已触发.

*)实际上,默认顺序是:

>触发前的语句级别
>触发前的行级别
>触发后的行级别
>触发后的声明级别

但是,如果您在触发前有两个行级别,默认情况下您无法确定这两个行的执行顺序.但我从评论中了解到,在Oracle 11中,您实际上可以指定顺序来覆盖这些情况.

猜你在找的Oracle相关文章