db2用户定义函数(UDF)外部函数java实现

近期有个需求需要实现汉字个数统计(由于db2不包括执行正则表达式匹配的功能),所以需要用db2的java UDF来实现,以下是在windows环境下的实现步骤:

db2用户定义函数(UDF)外部函数java实现_第1张图片
实现步骤

以下是一个例子(实现目标符合正则表达式个数):
java代码如下

import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class Count
{
   /**
     * 按照正则匹配统计
     * @param str
     * @param regexp
     * @return
     */
    public static int countByRegexp(String str,String regexp){
        int count = 0;
        Pattern p = Pattern.compile(regexp);
        Matcher m = p.matcher(str);
        while(m.find()){
            count++;
        }
        return count;
    }
}

直接进入db2实例下的JDK或JVM编译java文件或将jvm/jdk拷贝到其他目录编译如下:

C:\Users\lucifel\Desktop\db2_java\jre\bin>javac.exe -d ....\ ....\Count.java

拷贝编译好的class文件到 DB2 实例的 sqllib/function 目录下 windows目录如:

C:\Program Files\IBM\SQLLIB\FUNCTION

最后注册新建函数 代码如下:

set current schema='TEST'
CREATE OR REPLACE FUNCTION count_by_regexp(str varchar(3000),msg varchar(3000))
    RETURNS INTEGER
    FENCED 
    NOT DETERMINISTIC
    NO SQL
    LANGUAGE JAVA
    PARAMETER STYLE JAVA
    EXTERNAL NAME 'Count.countByRegexp' 
    NO EXTERNAL ACTION

上边代码中count_by_regexp函数的参数分别对应java代码中的参数
类型String对应varchar,int对应INTEGER

RETURNS INTEGER --返回类型
EXTERNAL NAME 'Count.countByRegexp' --相应的类名和方法

最后执行测试看是否成功:

--获取目标字符串字母的个数
values TEST.count_by_regexp('休息休息2ac2c33','[a-zA-Z]')

结果如下没有问题

3

你可能感兴趣的:(db2用户定义函数(UDF)外部函数java实现)