【问题标题】:Trigger inserting value based on values from antoher table根据另一个表中的值触发插入值
【发布时间】:2019-11-18 11:11:19
【问题描述】:

我是创建数据库触发器的新手,我无法让我的第二个触发器工作。

在表格工作流中插入新记录时,需要根据表格客户端中的城市调整worker。

客户编号是两个表之间的关系值。

这是我到目前为止写的:

CREATE OR REPLACE TRIGGER automatic_workflow
BEFORE INSERT ON workflow
for each row 
when(new.subject='Account' and new.fase=1)
BEGIN
if
(:new.number=client.number) and client.city='Amsterdam' then new.worker ='Bill';
end if;
END;

【问题讨论】:

  • 你需要SELECT数据来自client表。
  • 用您正在使用的数据库标记您的问题。解释你正在使用什么逻辑。你的代码没有意义。
  • 触发器是高度特定于供应商的 - 所以请添加标签以指定您使用的是mysqlpostgresqlsql-serveroracle 还是db2 - 或完全不同的东西。
  • 我试过了,但是在使用 :new.number 时我不能正确地得到 de 语法
  • 我用的是oracle

标签: sql triggers insert


【解决方案1】:

尝试像这样在开头放置一个分隔符:

DELIMITER //
CREATE OR REPLACE TRIGGER automatic_workflow
BEFORE INSERT ON workflow
for each row 
when(new.subject='Account' and new.fase=1)
BEGIN
if
(:new.number=client.number) and client.city='Amsterdam' then new.worker ='Bill';
end if;
END;
//

【讨论】:

    【解决方案2】:

    client 是什么?它没有在触发器中定义。

    我怀疑你可能想要:

    CREATE OR REPLACE TRIGGER automatic_workflow
    BEFORE INSERT ON workflow
    FOR EACH ROW
    WHEN (new.subject = 'Account' and new.fase = 1)
    BEGIN
        IF EXISTS (SELECT 1
                   FROM client c
                   WHERE c.number = :new.number and    
                         c.city = 'Amsterdam' 
                  ) THEN
            new.worker = 'Bill';
        END IF;
    END;
    

    【讨论】:

    • 在使用声明客户端的号码后,我的触发器工作了
    猜你喜欢
    • 2013-10-06
    • 1970-01-01
    • 1970-01-01
    • 2015-11-25
    • 2018-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多