GBase 8s的数据库CLOB是一种文本智能大对象类型,一般情况下可以使用fileclob函数进行插入数据,或者在程序中使用绑定变量的方式插入。
在GBase 8s的SQLMODE=Oracle模式中,实现了直接insert操作,但SQLMODE=GBase模式中没有实现
以下介绍自己实现在SQLMODE=GBase模式下实现直接insert clob的操作的方法
注意:数据库版本的不同,可能实现的方法略有不同
从扩展中创建dbms_lob_* 函数,使用到的:
GBase 8s 检查是否是IP且转数值函数
GBase 8s中没有ip类型字段(如inet),对于判断字符串是否是IP地址,需要自己编写相应的函数。
如下,实现检查输入的字符串是否为IPv4地址(-1否),且转换成数值类型:
GBase 8s clob数据类型操作函数
GBase 8s clob数据类型操作函数
GBase 8s中clob数据类型的操作一般使用filetoclob,lotofile和locopy函数;
示例如下:
-- 插入文本文件到指定字段中
insert into tabclob(id, clobcol) values (1, filetoclob('/home/gbase/clob.file','client'));
-- 导出clob内容至文件
select lotofile(clobcol,'/home/gbase/clob.file.20220103','client') from tabclob;
-- 复制clob
insert into tabclob2 select 2,locopy(clobcol) from tabclob where id = 1;
GBase 8s 自定义mysql兼容函数
与前一文档类似,本文档通过SPL实现部分mysql兼容函数。
参考的SQL语句: mysql_func.sql
包含的内容:
-- STRCMP函数:比较两个字符串
function STRCMP(str1 lvarchar, str2 lvarchar)
GBase 8s Java UDR安装说明
创建Java UDR过程
1, 将共享库gbasedbt-judr-x.x.x.jar 放置于数据库服务器上
比如,放到$GBASEDBTDIR/udr 目录下,并改名为judr.jar
则gbasedbt-judr-x.x.x.jar的位置为$GBASEDBTDIR/udr/judr.jar
下载地址:https://docs.gbasedbt.com/Java_Udr/install/gbasedbt-judr-1.0.0.jar
GBase 8s自定义interval类型转number类型函数
GBase 8s数据库中,两个日期时间的值相减,得到的是interval类型的值(interval day to second),而oracle中直接就是数值了。我们可以通过自定义函数的方式,把interval类型转换成数值型(decimal(20,8))。
GBase 8s自定义使用hex或者unhex函数
从mysql迁移到GBase 8s数据库时,原有hex(有同名函数,但用法不同)、unhex函数在GBase 8s中不可用,因此需要自己创建相应的函数,可以使用C或者JAVA创建自定义例程,也可以使用存储过程。以下以存储过程方式创建。
hexstr函数实现的功能是:将文本转换成十六进制字符串显示。
unhex函数实现的功能是:将十六进制字符串转换成对应的ASCII可视文本显示。
GBase 8s存储过程中获取当前时间
GBase 8s数据库中获取当前时间,可以使用current year to second这样方式。
但在存储过程中,如果我们想要获取某一段语句的执行时间长度,需要使用两个变量获取当时时间,如下:
drop procedure if exists proc_datetime;
create procedure proc_datetime() returns varchar(255);
define dt1 datetime year to second;
define dt2 datetime year to second;
let dt1 = current year to second;
system "sleep 5";
let dt2 = current year to second;
return "dt1: " || dt1 || " dt2: " || dt2;
end procedure;
GBase 8s数据库中的二进制、八进制、十进制、十六进制相互转换函数
用户可能会用到二进制、八进制、十进制、十六进制之间的相互转换。
注:支持0至bigint(9223372036854775807)的间的进制转换
GBase 8s获取第几周、第几天的函数
Oracle数据库中获取某个日期是当年的第几周、当月的第几周、当年的第几天均可以使用to_char来获取。
to_char(sysdate,'WW'); -- 当年第几周,以01-01 至 01-07为第一周
to_char(sysdate,'W'); -- 当月第几周,以01 至 07为第一周
to_char(sysdate,'DDD'); -- 当年第几天,以01-01 为 001
GBase 8s的to_char尚未实际该功能,因此需要使用自定义函数来实现,具体如下:
当年的第几周
drop function if exists weekofyear(datetime year to second);
-- day of year, first week is 01-01 ~ 01-07
create function weekofyear(p_datetime datetime year to second) returns int with (not variant);
return trunc(1 + (p_datetime - TRUNC(p_datetime, 'YEAR')) / 7);
end function;