DB2中的UDF在触发器中调用

时间:2016-09-07 16:27:50

标签: java db2 udf db2-luw database-trigger

在我的应用程序中,我需要一个通过触发器运行的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 deterministicnot fenced

我正在使用DB2 10.5版。

请帮忙!

0 个答案:

没有答案