SAP IQ从15.4开始支持用java语言编写用户自定义函数(udf)。IQ的udf有两种类型,一种是标量udf,另一种是表udf。标量udf是返回单行记录或值,而表udf能够返回多条记录(结果集)或多个值。
本文首先介绍一个简单的Hell world 标量UDF,在后面的博文中将介绍表udf。
1. 环境说明
* SAP IQ 16.0 SP08.30
* 虚拟机一台,操作系统Linux 64bit
* 使用IQ demo数据库
* JDK 1.7.0_75
2. 编写Hello world标量udf函数。
--下面是示例源代码(IQ 自带了示例代码,位于$IQDIR16/samples/udf/java/src目录下)
package udf.example;
public class HelloJavaUDF
{
public static String helloJava( String name )
{
// Simply return Hello and the name passed in.
return "Hello " + name;
}
}
3. 编译
假设代码位于$IQDIR16/udf/java/src目录下,编译好的类位于
$IQDIR16/udf/java/classes 目录下。 执行如下命令:
cd $IQDIR16/udf/java/src
javac -d ../classes/ HelloJavaUDF.java
编译成功后,$IQDIR16/udf/java/classes目录下生成了编译好的类。
4. 安装类文件到IQ数据库
--启动dbisql工具
dbisql -c "uid=DBA;pwd=sql" -nogui
--执行如下命令(在我的环境中$IQDIR16目录是/opt/sybiq/16.0/IQ-16_0)安装包含java udf函数的java类
INSTALL JAVA NEW FROM FILE '/opt/sybiq/16.0/IQ-16_0/udf/java/classes/example/HelloJavaUDF.class'
5. 创建用户自定义函数
CREATE FUNCTION my_helloJava(IN name VARCHAR(249) ) RETURNS VARCHAR(255) EXTERNAL NAME 'example.HelloJavaUDF.helloJava(Ljava/lang/String;)Ljava/lang/String;' LANGUAGE JAVA
说明:EXTERNAL_NAME是按照java包名.java类名.方法名指定的,括号中是方法的参数,右括号后面跟的是方法的返回类型
6. 在SQL语句中使用udf函数
--执行如下语句
SELECT my_helloJava( 'myname' ) from iq_dummy
7. 其他java udf函数管理命令
(1) 更新已经安装好的java类
如果java用户自定义函数进行了修改,那么需要对已经安装到IQ数据库中的类进行更新。例如:
INSTALL JAVA UPDATE FROM FILE '/opt/sybiq/16.0/IQ-16_0/udf/java/classes/example/HelloJavaUDF.class'
(2) 删除安装的java类
例如:执行如下命令可以删除安装好的示例java类
REMOVE JAVA CLASS example.HelloJavaUDF
DROP FUNCTION my_helloJava
阅读(2746) | 评论(0) | 转发(0) |