微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

原文地址:https://www.jb51.cc/oracle/205331.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐