標籤:style blog http io ar os 使用 sp for
運用情境:
1、DB2 資料庫中的記錄被更改。
2、如果這個更改使資料記錄滿足某些基於布爾邏輯的條件,資料庫觸發器將調用一個 Java UDF。
3、Java UDF 使用 WebService介面通知其他服務。
步驟1:建立表
create table zjyw.TTRD_UDF
(CODE varchar(30) not null,
NAME varchar(50) not null,
REMARK varchar(100) not null)
步驟2:測試資料
insert into zjyw.TTRD_UDF values(‘TF1501‘,‘TF1501‘,‘http://127.0.0.1:8080/Test‘);
insert into zjyw.TTRD_UDF values(‘TF1503‘,‘TF1503‘,‘http://127.0.0.1:8080/Test‘);
步驟3:建立JavaUDF.java
import java.io.BufferedWriter;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStreamWriter;import COM.ibm.db2.app.UDF;public class JavaUDF extends UDF {//private static final Logger logger = LoggerFactory.getLogger(JavaUDF.class);/** * 建立檔案 * @param fileName * @throws IOException */public static void createFile(String fileName) throws IOException {File f = new File(fileName);if (!f.exists()) {f.createNewFile();}}/** * 追加寫檔案 * @param fileName * @param content * @throws IOException */public static void writeFile(String fileName, String content) throws IOException {createFile(fileName);BufferedWriter out = null;try {out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fileName, true)));out.write(content);} finally {if (out != null) {out.close();}}}public static String send(String i_code, String i_name,String i_code_new, String i_name_new) {try {writeFile("d:/test.txt", i_name + i_name_new);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}// logger.info(input);// sendWebService(""); // 未實現return "OK";}}
編譯JavaUDF.java,產生的JavaUDF.class拷貝到db2的FUNCTION目錄下,如:C:\Program Files\IBM\SQLLIB\FUNCTION
打包成XQUANT-UDF.jar包
步驟4:註冊jar包
call sqlj.install_jar(‘file:///d:/xquant/java/xQuant-UDF.jar‘,‘UDF‘)
步驟5:建立函數
create function zjyw.SENDMESSAGE(CODE varchar(30),
NAME varchar(50),
CODE_NEW varchar(30),
NAME_NEW varchar(50))
returns varchar(100)
fenced
variant
no sql
external action
language java
parameter style java
external name ‘XQUANT-UDF:JavaUDF.send‘
步驟6:觸發器
CREATE TRIGGER ZJYW.AFTER_UPDATE_UFT
AFTER UPDATE OF NAME ON ZJYW.TTRD_UDF
REFERENCING OLD AS OLDROW NEW AS NEWROW
FOR EACH ROW MODE DB2SQL
BEGIN ATOMIC
IF(NEWROW.NAME<>‘‘)
THEN
VALUES(SENDMESSAGE(OLDROW.CODE,OLDROW.NAME,NEWROW.CODE,NEWROW.NAME));
END IF;
END;
步驟7:修改資料
update zjyw.TTRD_UDF set NAME=‘TF1506‘ where CODE=‘TF1503‘;
執行成功後會在db2伺服器的D盤產生一個test.txt檔案。
使用 DB2 觸發器和Java UDF實現業務通知