gpt4 book ai didi

java - 条件 SQL - 触发器设置标志

转载 作者:行者123 更新时间:2023-12-02 12:01:30 26 4
gpt4 key购买 nike

关于我为如下所示的表创建的触发器,我有几个问题:

Table with the trigger

它应该根据对任何状态字段所做的更改将标志设置为 true 或 false。该标志将由 Java 应用程序读取,该应用程序会将值推送到 JIRA-REST 服务。

我的做法相当冗长,并且是更大触发器的一部分,因此这里有一些伪 sql 可以为您提供一个想法:

-- Part of code that works, Selection of table, setting var_push_flag to false, and other SQL
-- ...
-- BEGIN MY Part of Code
IF
:new.STATUS_SERVICE_1 <> :old.STATUS_SERVICE_1
or
:new.STATUS_SERVICE_2 <> :old.STATUS_SERVICE_2
or
....
or
:new.STATUS_SERVICE_N <> :old:STATUS_SERVICE_N
THEN
var_push_flag := 'true';
ELSE
var_push_flag := 'false';
END IF
-- END MY Part of Code
-- Part of the code that updates the table (works)

请忽略此表中的所有内容都是字符串的事实,因为:

  1. 不是我设计的
  2. 这不是问题的一部分(尽管它是一个问题)

我的问题是:

  1. 有没有一种冗余度较低的方法来检查任何字段是否已更改?
  2. 有时它确实会更改字段的值,但更新标志不会设置为 true。我检查了它是否是一个未包含在触发器中的字段,但确实如此。我还通过更新所有字段进行了测试,但仍然没有结果。这种情况仅发生在某一特定行。

提前非常感谢您!

最佳答案

  1. 除非您想读取表元数据和动态 SQL,否则据我所知,您所拥有的是唯一的方法。

  2. 您的列是否可以为空?如果是这样,:new.Foo <> :old.Foo将评估为 UNKNOWN ,不是TRUE 。您还需要检查任何可为空的列是否为空:

    :new.Foo <> :old.Foo 
    OR :new.Foo IS NULL and :old.Foo IS NOT NULL
    OR :new.Foo IS NOT NULL and :old.Foo IS NULL

(还要确保 var_push_flag 确实稍后实际使用。)

关于java - 条件 SQL - 触发器设置标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47221137/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com