Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1569023
  • 博文数量: 201
  • 博客积分: 2812
  • 博客等级: 少校
  • 技术积分: 3029
  • 用 户 组: 普通用户
  • 注册时间: 2011-01-18 18:28
个人简介

从事数据库工作多年,目前看好分布式NeSQL/HTAP数据库在企业客户市场的发展。未来的主要方向是——致力于 NewSQL/HTAP 数据库的推广普及。

文章存档

2016年(1)

2015年(8)

2014年(23)

2013年(50)

2012年(32)

2011年(87)

分类: Sybase

2015-06-24 15:24:19

     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


        
        

阅读(2514) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~