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中,您实际上可以指定顺序来覆盖这些情况.

相关文章

Java Oracle 结果集是Java语言中处理数据库查询结果的一种方...
Java AES和Oracle AES是现代加密技术中最常使用的两种AES加密...
Java是一种广泛应用的编程语言,具备可靠性、安全性、跨平台...
随着移动互联网的发展,抽奖活动成为了营销活动中不可或缺的...
Java和Oracle都是在计算机领域应用非常广泛的技术,他们经常...
Java 是一门非常流行的编程语言,它可以运行于各种操作系统上...