达梦数据库如何使用外部c函数
1. 在linux上编辑一个concat.c的文件,内容如下:
#include <string.h> #include <stdlib.h> #include "de_pub.h"
de_data C_CONCAT(de_args *args) { de_data de_ret; char* str1; char* str2; char* str3; int len1; int len2;
str1 = de_get_str(args, 0); str2 = de_get_str_with_len(args, 1, &len2); len1 = strlen(str1); str3 = malloc(len1 + len2); memcpy(str3, str1, len1); memcpy(str3 + len1, str2, len2);
de_str_free(str1); de_str_free(str2);
de_ret = de_return_str_with_len(str3, len1 + len2); free(str3); return de_ret; } |
2. 编译一下,得到so文件
--这里需要先将达梦数据库安装上,依赖include目录下的相关文件
gcc -o concat.so -fPIC -shared concat.c -I /opt/dmdbms_hhm/include |
3. 在达梦数据库中创建外部函数,注意路径不要写错了,如果是dm用户安装,确保dm用户对这个so文件有权限
CREATE OR REPLACE FUNCTION MY_CONCAT(A VARCHAR, B VARCHAR) RETURN VARCHAR EXTERNAL '/opt/dmdbms_hhm/bin/concat.so' C_CONCAT USING C; |
4. 调用这个函数测试一下: