Java 条件SQL-设置标志的触发器
我有几个关于我为如下表创建的触发器的问题: 根据对任何状态字段所做的更改,应将标志设置为true或false。该标志将由Java应用程序读取,该应用程序将值推送到JIRA-REST-Service 我这样做的方式相当冗长,而且是一个更大触发器的一部分,因此这里有一些伪sql让您了解一下:Java 条件SQL-设置标志的触发器,java,sql,oracle,oracle-sqldeveloper,Java,Sql,Oracle,Oracle Sqldeveloper,我有几个关于我为如下表创建的触发器的问题: 根据对任何状态字段所做的更改,应将标志设置为true或false。该标志将由Java应用程序读取,该应用程序将值推送到JIRA-REST-Service 我这样做的方式相当冗长,而且是一个更大触发器的一部分,因此这里有一些伪sql让您了解一下: -- Part of code that works, Selection of table, setting var_push_flag to false, and other 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)
——工作代码的一部分,选择表,将var\u push\u标志设置为false,以及其他SQL语句
-- ...
--开始我的代码部分
如果
:new.STATUS\u SERVICE\u 1:old.STATUS\u SERVICE\u 1
或
:new.STATUS\u SERVICE\u 2:old.STATUS\u SERVICE\u 2
或
....
或
:new.STATUS\u SERVICE\N:old:STATUS\u SERVICE\N
然后
var_push_标志:='true';
其他的
var_push_标志:='false';
如果结束
--结束我的代码部分
--更新表格的部分代码(工作)
请忽略此表中的所有内容都是字符串的事实,因为:
:new.Foo:old.Foo
将计算为未知
,而不是真
。您还需要检查任何可为空的列是否为空:
: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
:new.Foo:old.Foo
或者:new.Foo为NULL,而:old.Foo不为NULL
或者:new.Foo不为NULL,而:old.Foo为NULL
(还要确保以后确实使用了
var\u push\u flag
)我检查了字段,它们都可以为空,但有一个值。我还需要检查空值吗?@Zanidd您确实需要检查空值,但是如果列既有值又有值,那么这就不是问题所在行的特定问题,而且肯定还有其他问题,我将无论如何修复触发器。还有其他建议吗?@Zanidd从你的片段中我看不出。也许有什么东西提前回来了?