使用 DB2 觸發器和Java UDF實現業務通知

來源:互聯網
上載者:User

標籤: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實現業務通知

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.