达梦数据库udf实现

3 篇文章 0 订阅
1 篇文章 0 订阅

官方介绍的很简单,其实有点小坑

头文件引用

//-I/dm/dmdbms/include/
#include "de_pub.h"

库文件引用

-L/dm/dmdbms/bin/ -ldmde

字符串拼接代码(函数名必须是大写,否则创建成功,调用报错【[-7095]:外部函数加载失败.】)

de_data C_CONCAT(de_args *args)        
{
	de_data  de_ret;
	char* str1;
	char* str2;
	char* str3;
	int len1;
	int len2;

	str1 = (char*)de_get_str(args, 0);					 /*从参数列表中取第0个参数*/
	str2 = (char*)de_get_str_with_len(args, 1, (udint4*)&len2); 		 /*从参数列表中取第1个参数的值以及长度*/
	len1 = strlen(str1);	
	str3 = (char*)malloc(len1 + len2);
	memcpy(str3, str1, len1);
	memcpy(str3 + len1, str2, len2);
	
	de_str_free((sdbyte*)str1); 	/*调用get函数得到字符串之后,需要调用此函数释放字符串空间*/
	de_str_free((sdbyte*)str2);
	
	de_ret = de_return_str_with_len((udbyte*)str3, len1 + len2);     /*返回字符串*/
	free(str3); 
	return de_ret;
}

编译生成动态库

创建函数

CREATE OR REPLACE FUNCTION C_CONCAT(A VARCHAR, B VARCHAR) 
RETURN VARCHAR
EXTERNAL '/dm/dmdbms/bin/libtestudf.so' C_CONCAT USING C;
/

实际项目使用

 

注:因为c编写达梦udf走的是dmap代理(/dm/dmdbms/bin/dmap),所以首先需要启动代理。如果库依赖外部环境变量,需要在配置环境变量的控制台手工启动dmap,而不是在运行disql命令行控制台配置,否则环境变量不能正常识别。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值