DB2 C language external scalar user-defined function
来源:互联网 发布:男科网络咨询说话技巧 编辑:程序博客网 时间:2024/04/20 16:26
Sample step of define a C language external scalar user-defined function.
1. Define function implementation using C language
$ cat mymd5.c
#include <stdio.h>#include <string.h>#include <stdlib.h>#include <time.h>#include <sqlca.h>#include <sqludf.h>#include <openssl/md5.h>#ifdef __cplusplusextern "C"#endifSQL_API_RC SQL_API_FN md5(SQLUDF_CHAR *input, SQLUDF_CHAR *output, SQLUDF_NULLIND *inputInd, SQLUDF_NULLIND *outputInd, SQLUDF_TRAIL_ARGS){ if (*inputInd == -1) { *outputInd = -1; } else { *outputInd = 0; MD5_CTX ctx; unsigned char md[16]; char tmp[3]={'\0'}; int i; MD5_Init(&ctx); MD5_Update(&ctx, input, strlen(input)); MD5_Final(md,&ctx); for( i=0; i<16; i++ ){ sprintf(tmp,"%02x",md[i]); strcat(output,tmp); } } return;}
About function declaration definition, please refer to http://www.ibm.com/support/knowledgecenter/SSEPGG_9.7.0/com.ibm.db2.luw.apdv.routines.doc/doc/c0023763.html
2. Compile function into a shared library
$ cat makefile
DB2INSTDIR=/home/db2inst1mymd5: mymd5.c gcc -I${DB2INSTDIR}/sqllib/include -L${DB2INSTDIR}/sqllib/lib -o $@ -Wl,-rpath,${DB2INSTDIR}/sqllib/lib -ldb2 -ffloat-store -fPIC -shared $< -lcrypto
3. Define DB2 function prototype
$ cat mymd5.sql
CREATE FUNCTION md5(VARCHAR(20)) RETURNS CHAR(32) LANGUAGE C PARAMETER STYLE SQL NO SQL NOT FENCED DETERMINISTIC RETURNS NULL ON NULL INPUT NO EXTERNAL ACTION EXTERNAL NAME '/full/path/to/mymd5!md5';
You can also put the shared library into folder /home/db2inst1/sqllib/function, so that the "EXTERNAL NAME" should be written as EXTERNAL NAME 'mymd5!md5'
$ db2 -tf mymd5.sqlDB20000I The SQL command completed successfully.
4. Verify the function
$ db2 "select md5('123') from sysibm.sysdummy1"1 --------------------------------202cb962ac59075b964b07152d234b70 1 record(s) selected.
0 0
- DB2 C language external scalar user-defined function
- DB2 define external scalar java user-defined function
- DB2基于JAVA的自定义函数(user-defined-function)示例
- UDF (User-defined Function)
- 使用db2look导出DB2中user defined function和procedure的DDL
- SQL-UDF:GetMidStr User Defined Function
- hive UDF(User-Defined-Function) 实战
- c++ container with user defined compare function
- hive的UDF 函数(User-Defined-Function)
- C语言学习笔记(四) -自定义函数 User-defined Function
- User-Defined Types in C
- A Macro Defined Ring Buffer(C Language)
- MySql基础-自定义函数(user-defined function,UDF)
- 第39天: UDF函数 user defined function
- C Language Study - a dangerous function - getchar()
- C language tutorial Chapter fifth: function
- C language tutorial Chapter fifth: function 2
- C language tutorial Chapter fifth: function 3
- 数据结构之双向链表(C语言实现)
- NULL¬ NULL
- android 网络请求获得返回数据(1)
- spring boot 整合 spring security 之使用数据库验证
- android post请求
- DB2 C language external scalar user-defined function
- C::有趣的约瑟夫环
- 最大子矩阵(贪心)
- iOS 10 开发适配系列 之 权限Crash问题
- NOIP2016 总结
- DB2 how to drop overloaded functions
- storm安装
- 【汇编】十以内冒泡排序
- A - 搜索I 简单图论