返回首页

gbase数据、南大通用产品文档:GBase8aUDF 函数接口

更新日期:2024年09月11日

对每一个想在SQL 语句中使用的函数(假设函数名为func),应该定义对应的C
(或C++ ,C++函数声明要加上extern
"C ")函数,该函数满足以下规则:
func()(必需)
主函数。这是计算函数结果的地方,每行调用一次。SQL 类型与C/C++函数返回
类型的对应关系如下:
表5- 194 SQL 类型与C/C++函数返回类型的对应关系
SQL 类型
C/C++ 类型
STRING
char *
INTEGER
long long
REAL
double
func_init()(必需)
func()的初始化函数,只在开始调用一次,它可用于:

检查传到func()的参数个数;

检查参数类型是否正确或者当主函数被调用时将参数强制转换成需要的类
型;

分配主函数所需的内存;

指定返回结果的最大长度;

指定返回REAL 类型的函数的最大小数位;

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-04-10)
南大通用数据技术股份有限公司
1392

指定结果是否允许为NULL。
func_deinit()(可选)
func()的结束函数,
只在所有行结束后调用一次,
它可用于释放初始化函数分配的
内存。
说明

当一条SQL 语句调用func()时,GBase 调用初始化函数func_init(),执行所需的初
始化工作,例如参数检查或内存分配。

如果func_init()返回一个错误,SQL 语句返回一条错误消息同时不会调用主函数和
结束函数。否则,为每行调用主函数func()一次。

在所有行被处理完后,调用结束函数func_deinit(),执行必要的清理工作。
注意
所有函数必须是线程安全的(不仅是主函数,还有初始化和结束函数)。不允许
在函数中改变全局共享或静态的变量。如果需要内存,应该在func_init()中分
配它并且在func_deinit()中释放它。

语法
GET_FORMAT(DATE|TIME|DATETIME,EUR'|'USA'|'JIS'|'ISO'|'INTERNAL')
返回一个格式字符串。
函数说明
这个函数可以与DATE_FORMAT()函数或STR_TO_DATE()函数进行组合。
对于参数DATE、DATETIME 和TIME,各有五种可能值,共计十五种格式字符
串:
表5- 24 函数调用与字符串格式
函数调用


GET_FORMAT(DATE,'USA')
'%m.%d.%Y'
GET_FORMAT(DATE,'JIS')
'%Y-%m-%d'
GET_FORMAT(DATE,'ISO')
'%Y-%m-%d'
GET_FORMAT(DATE,'EUR')
'%d.%m.%Y'
GET_FORMAT(DATE,'INTERNAL')
'%Y%m%d'
GET_FORMAT(DATETIME,'USA')
'%Y-%m-%d-%H.%i.%s'
GET_FORMAT(DATETIME,'JIS')
'%Y-%m-%d %H:%i:%s'
GET_FORMAT(DATETIME,'ISO')
'%Y-%m-%d %H:%i:%s'
GET_FORMAT(DATETIME,'EUR')
'%Y-%m-%d-%H.%i.%s'
GET_FORMAT(DATETIME,'INTERNAL')
'%Y%m%d%H%i%s'
GET_FORMAT(TIME,'USA')
'%h:%i:%s %p'
GET_FORMAT(TIME,'JIS')
'%H:%i:%s'
GET_FORMAT(TIME,'ISO')
'%H:%i:%s'
GET_FORMAT(TIME,'EUR')
'%H.%i.%S'
GET_FORMAT(TIME,'INTERNAL')
'%H%i%s'
说明
对于上述表中使用的说明符的作用,请参见“ 5.1.5.5.13
DATE_FORMAT(date,FORMAT)”中的表。

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-04-10)
南大通用数据技术股份有限公司
797
示例
示例1:DATE_FORMAT()与GET_FORMAT()函数进行组合。
GET_FORMAT(DATE,'EUR')对应输出的格式为“%d.%m.%Y”。
gbase> SELECT
DATE_FORMAT('2020-08-30',GET_FORMAT(DATE,'EUR')) FROM dual;
+--------------------------------------------------+
| DATE_FORMAT('2020-08-30',GET_FORMAT(DATE,'EUR')) |
+--------------------------------------------------+
| 30.08.2020
|
+--------------------------------------------------+
1 row in set
示例2:STR_TO_DATE()与GET_FORMAT()函数进行组合。
GET_FORMAT(DATE,'USA')对应的输出格式为“%Y-%m-%d”。
gbase> SELECT
STR_TO_DATE('08.30.2020',GET_FORMAT(DATE,'USA')) FROM dual;
+--------------------------------------------------+
| STR_TO_DATE('08.30.2020',GET_FORMAT(DATE,'USA')) |
+--------------------------------------------------+
| 2020-08-30
|
+--------------------------------------------------+
1 row in set

这些主题描述随同 GBase 8s ESQL/C 提供的所有库函数的语法和行为。