在我的应用程序中,我需要一个通过触发器运行的Java进程 - 只要对dateLastChanged
的字段TrackTable
进行了更改,该进程就会触发。
我为此执行了以下步骤:
1。)编译了以下代码:
public class UDFClass {
public static int udf(String coCode, String tNo) {
int result = 1;
String command = "<the java command here>"; // line-K
try {
Runtime.getRuntime().exec(command);
} catch (IOException e) {
result = 0;
}
return result;
}
}
2。)将UDFClass.class放在DB2安装的 sqllib / function 目录下
3.)在db2上运行以下函数。它运行成功:
create or replace function theresUpdate(cocode varchar(4), tnumber varchar(20))
returns integer
external name 'UDFClass.udf'
language Java
parameter style Java
not deterministic
no sql
external action
4)在DB2上成功运行了以下触发器:
create or replace trigger notify
after update of dateLastChanged
or insert
on TrackTable
REFERENCING new as newRow
for each row
not secured
begin
update performanceParams set thevalue = theresUpdate(newRow.cocode, newRow.tnumber) where thekey = 'theDate';
end
要进行测试,我按以下方式更新TrackTable
:
update TrackTable set dateLastChanged = dateLastChanged + 10 where tNumber = ‘21123’
此更新查询在没有上述(4)中的触发器的情况下成功运行。但是,使用此触发器,我收到以下错误:
触发器“LTR.NOTIFY”中触发的SQL语句发生错误。为错误返回的信息包括SQLCODE“-4301”,SQLSTATE“58004”和消息标记“1”.SQLCODE = -723,SQLSTATE = 09000,DRIVER = 4.18.60
This页面表明这是与Java相关的错误。但是,当我从Linux命令行调用它时,(1)中Java代码的 line-K 中的命令运行正常。
我在(3)中尝试了该函数的其他一些变体 - deterministic
而不是not deterministic
,not fenced
。
我正在使用DB2 10.5版。
请帮忙!