DB 2 V 9.7 Javaカスタム関数UDFを実現
14237 ワード
DB 2 V 9.7 Javaカスタム関数UDFを実現1.Javaコード作成、UDFクラス を実現.Javaコードのコンパイル 3.classファイル を配置する4.関数の作成(スペースに注意) 張小意外2019年3月13日午前北京で
1.Javaコード作成、UDFクラス実現
2.Javaコードのコンパイル
A.コンパイル時にdb 2に付属のJavaバージョン番号db 2 get dbm cfg Java Development Kit installation path(JDK_PATH)=/home/db 2 inst 1/sqllib/java/jdk 64 Cd/home/db 2 inst 1/sqllib/java/jdk 64./java-version B.ローカルUDFを対応するJavaバージョン番号に変更してclassファイルにコンパイルする
3.classファイルの配置
A.コンパイルされたclassファイルは/home/db 2 inst 1/sqllib/functionの下に置かれ、777権限が付与されるB.db 2 forceアプリケーションall C.Db 2 stop D.Db 2 start
4.関数の作成(スペースに注意)
1.Javaコード作成、UDFクラス実現
import COM.ibm.db2.app.UDF;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class with_circle extends UDF {
public static Connection conn=null;
static {
try {
conn=getCon();
}catch (Exception e){
e.printStackTrace();
}
}
/**
*
* @param p_id
* @return
*/
public static String cicle(String p_id){
String sql =zz_sql(p_id);
Long cn =getCount(sql);
String str ="";
if(cn!=null){
str=String.valueOf(cn);
}
return str;
}
public static Connection getCon() throws Exception{
Class.forName("com.ibm.db2.jcc.DB2Driver").newInstance();
String url = "jdbc:db2://188.96.86.72:50000/AUDIT";
String user = "db2inst1";
String password = "root";
Connection conn = DriverManager.getConnection(url, user, password);
return conn;
}
public static String zz_sql(String p_id){
String sql ="with n(id) as " +
" (select k.id " +
" from AUDIT.k_di as k " +
" where " ;
if(p_id==null||p_id.equalsIgnoreCase("null")){
sql=sql+" k.p_id is null ";
}else {
sql =sql+" k.p_id ='"+p_id+"' ";
}
sql =sql+
" UNION ALL " +
" select k.id " +
" from AUDIT.k_di as k, n " +
" where k.p_id = n.id) " +
"select count(id) as cn from n";
return sql;
}
public static Long getCount(String sql){
try{
Statement stms=conn.createStatement();
ResultSet rs=stms.executeQuery(sql);
while (rs.next()){
long cn =rs.getLong("cn");
return cn;
}
rs.close();
stms.close();
conn.close();
}catch (Exception e){
e.printStackTrace();
}
return null;
}
public static void main (String[]args){
//Long cn =cicle("null");
//System.out.println(cn);
}
}
2.Javaコードのコンパイル
A.コンパイル時にdb 2に付属のJavaバージョン番号db 2 get dbm cfg Java Development Kit installation path(JDK_PATH)=/home/db 2 inst 1/sqllib/java/jdk 64 Cd/home/db 2 inst 1/sqllib/java/jdk 64./java-version B.ローカルUDFを対応するJavaバージョン番号に変更してclassファイルにコンパイルする
3.classファイルの配置
A.コンパイルされたclassファイルは/home/db 2 inst 1/sqllib/functionの下に置かれ、777権限が付与されるB.db 2 forceアプリケーションall C.Db 2 stop D.Db 2 start
4.関数の作成(スペースに注意)
CREATE FUNCTION WITH_NEW(p_id VARCHAR(256))
RETURNS VARCHAR(256)
SPECIFIC WITH_NEW
EXTERNAL NAME 'with_circle!cicle(Ljava/lang/String;)Ljava/lang/String;'
LANGUAGE JAVA
PARAMETER STYLE JAVA
NOT DETERMINISTIC
FENCED
THREADSAFE
RETURNS NULL ON NULL INPUT
NO SQL
EXTERNAL ACTION
NO SCRATCHPAD
NO FINAL CALL
ALLOW PARALLEL
NO DBINFO
STATIC DISPATCH
INHERIT SPECIAL REGISTERS