以下是我的表格结构:
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中,您实际上可以指定顺序来覆盖这些情况.