根据列中的状态更改创建触发器并在表的另一列中插入值

Posted

技术标签:

【中文标题】根据列中的状态更改创建触发器并在表的另一列中插入值【英文标题】:Create Trigger based on Status change in column and insert value in another column for a table 【发布时间】:2021-04-30 10:36:15 【问题描述】:

我有一个名为Employee 的表,其中包含StatusExpected_Promotion_Date 之类的列

Status columnStatusEnum 填充,其值类似于 Level 1 Level 2Level 3。 当EmployeeStatusLevel 1 更改为Level 2 时,我需要一个trigger 来填充Expected_Promotion_Date 列中的值,即当前日期加上3 年。

我尝试制作触发器,请找到相同的参考代码:

CREATE or REPLACE TRIGGER Expected_Promotion_Date 
    AFTER   
    UPDATE OF STATUS FOR EACH ROW   
     DECLARE    NEXT_MAINTENANCE_CONTROL DATE;   
BEGIN     
   IF(:OLD.STATUS<>:NEW.STATUS) THEN     
    BEGIN   
      IF(:OLD.STATUS=-10 AND :NEW.STATUS=00)THEN         
     BEGIN  

     END      
  END   
END

有人可以帮助我使用trigger,因为我是新手,并且是第一次学习它。如果有人可以帮助我或指导我,那就太好了。

提前致谢。

【问题讨论】:

@Ankit - 请edit your question 将您的代码添加为格式化文本。还包括表定义,并解释您的代码有什么问题 - 如果它出错,或者没有按照您的预期进行,等等。 @APC Level 1 的 intValue 为 -10,Level 2 的 intValue 为 00 【参考方案1】:

类似这样的:

create or replace trigger expected_promotion_date 
before update on employee for each row   
begin     

  if :old.status != :new.status then 
    :new.expected_promotion_date := trunc(sysdate) + interval '3' year;
  end if; 

end;
/

此代码检查 STATUS 的值是否已更改,如果不同,则使用今天的日期加上三年来填充预期促销日期列。


您可能需要调整此代码以处理您的问题中未包含的任何其他业务逻辑。例如,在您的评论中,您展示了一些与 STATUS 值相关的逻辑。我忽略了这一点,因为你没有解释应该发生什么。我们可以给出答案的有用性与问题的清晰度成正比。

【讨论】:

知道了,伙计,由于声誉计数低,无法投票,将其标记为正确,我实际上正在尝试对其进行调整。再次感谢您! 您应该能够为自己的问题投票?不是我需要代表,而是其他人可能 @APC 您可能想要检查 NULL 值。 @KoenLostrie - 这不是我的规则,这是由 Seeker 来定义要求的 :)

以上是关于根据列中的状态更改创建触发器并在表的另一列中插入值的主要内容,如果未能解决你的问题,请参考以下文章

如何根据 PySpark 数据框的另一列中的值修改列? F.当边缘情况

如何参考r中另一列中的另一个单元格值更改列中的单元格值?

如何将一列的列值组合到 MySQL 中的另一列中?

根据另一列中的更改创建带有时间戳的最后修改列

Mysql-如果我同时在表的一列中插入多个值,值的插入顺序是不是可能会改变?

如果同一表的另一列中存在值,如何找到对应的列值