返回首页

gbase数据、南大通用产品文档:GBase8a数学函数

更新日期:2024年09月11日


所有的数学函数在发生错误的情况下,8a 引擎均返回NULL。其它引擎可能报

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 819
错或返回其它值;

不同引擎上执行数学函数时,返回值的精度可能不同。

不透明数据类型是用户定义的数据类型,可以与 GBase 8s 内置数据类型相同的方式
使用。不透明数据类型允许您为数据库应用程序定义新的数据类型。

不透明数据类型是完全封装的;数据库服务器不了解不透明数据类型的内部格式。因
此,数据库服务器无法对如何访问具有不透明数据类型的列进行假设。数据库开发人员定
义了一个数据结构。它保存了不透明类型的信息和支持功能,告诉数据库服务器如何访问
此数据结构。

可以通过以下两种方式之一从 GBase 8s ESQL/C 应用程序访问不透明数据类型的值:

在外部格式中,作为字符字符串

数据库服务器通过不透明数据类型的输入和输出支持功能,在客户端应用程序和数据
库服务器之间传输外部格式。

在内部格式中,作为外部编程语言(C)中的数据结构

数据库服务器通过不透明数据类型的结束和发送支持功能,在客户端应用程序和数据
库服务器之间传输内部格式。

下表显示了可用于访问不透明数据类型的 GBase 8s ESQL/C 数据类型。

GBase 8s 数据类型
ESQL/C 主机变量
不透明数据类型的外部格式
lvarchar 主机变量

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 256 -

不透明数据类型的内部格式
fixed binary 主机变量
var binary 主机变量

本节使用名为 circle 的不透明数据类型演示 GBase 8s ESQL/Clvarchar 和 fixed
binary 主机变量如何访问不透明数据类型。此数据类型包括 x,y 坐标,表示圆的中心半径
值。下图显示了 circle 数据类型的内部数据结构。

图 1. 圆不透明数据类型的内部数据结构

typedef struct
{
double x;
double y;
} point_t;

typedef struct
{
point_t center;
double radius;
} circle_t;

下图显示了数据库中注册 circle 数据类型及其输入、输出、发送和接收支持函数的
SQL 语句。

图 2. 注册 circle 不透明数据类型

CREATE OPAQUE TYPE circle (INTERNALLENGTH = 24,
ALIGNMENT = 4);

CREATE FUNCTION circle_in(c_in lvarchar) RETURNS circle
EXTERNAL NAME '/usr/lib/circle.so(circle_input)'
LANGUAGE C;

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 257 -

CREATE IMPLICIT CAST (lvarchar AS circle WITH circle_in);

CREATE FUNCTION circle_out(c_out circle) RETURNS lvarchar
EXTERNAL NAME '/usr/lib/circle.so(circle_output)'
LANGUAGE C;
CREATE IMPLICIT CAST (circle AS lvarchar WITH circle_out);

CREATE FUNCTION circle_rcv(c_rcv sendrcv) RETURNS circle
EXTERNAL NAME '/usr/lib/circle.so(circle_receive)'
LANGUAGE C;
CREATE IMPLICIT CAST (sendrcv AS circle WITH circle_rcv);

CREATE FUNCTION circle_snd(c_snd circle) RETURNS sendrcv
EXTERNAL NAME '/usr/lib/circle.so(circle_send)'
LANGUAGE C;
CREATE IMPLICIT CAST (circle AS sendrcv WITH circle_snd);

CREATE FUNCTION radius(circle) RETURNS FLOAT
EXTERNAL NAME '/usr/lib/circle.so'
LANGUAGE C;

假设 circle 数据类型的输入和输出函数定义了下图所示的外部格式。

图 3. circle Opaque 数据类型的外部格式


下图显示了创建和插入多行到 circle_tab 表的 SQL 语句,它具有 circle 类型的列。


图 4. 创建具有 circle 不透明数据类型的列


GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 258 -

CREATE TABLE circle_tab (circle_col circle);
INSERT INTO circle_tab VALUES ('(12.00, 16.00, 13.00)');
INSERT INTO circle_tab VALUES ('(6.5, 8.0, 9.0)');

技术指标


常用数据类型
支持数字类型:
INTERGER、
SERIAL、
SERIAL8、
BIGSERIAL、
INT8 、SMALLINT 、BIGINT 、BIGSERIAL 、DECIMAL 、
NUMBERIC 、REAL 、SMALLFLOAT 、FLOAT 、DOUBLE
PRECISION、MONEY;字符类型:CHAR、CHARACTER
VARYING、
VARCHAR、
LVARCHAR、
NCHAR、
NVARCHAR;
日期类型:DATE、DATETIME、INTERVAL;布尔类型:
BOOLEAN
结构化查询语言
支持SQL 92/99 标准,支持标准的DDL、DML、DQL 等数据
库操作
数据库对象
提供了数据库,表,索引,视图,序列,存储过程,触发器,
系统函数和自定义函数等常用数据库对象的创建,修改和删除
操作,支持数据库用户的创建,删除操作,以及用户权限的分

GBase 8s V8.8 技术白皮书
第10页
南大通用数据技术股份有限公司
技术指标


配与回收
支持备份与恢复
支持在线全量备份,增量备份以及数据恢复
高密集事务处理
基于多线程的结构,可更有效地利用CPU,提供高并发用户连
接和高并发操作
支持数据复制
HAC 基于逻辑日志的同步实现数据复制
分片
分片策略支持轮询方式和表达式方式
字符集
GB18030-2022、UTF-8、GBK、EN_US.819
大对象类型
支持BYTE、TEXT、BLOB、CLOB
其他类型
JSON、BSON、XML