GBase 8s数据库的boolean类型取值为:'t','f',null。其它数据库可接受对应的1,0,null的数值写法。为了兼容使用,可临时自定义转换及等值及不等值操作函数的方式实现兼容。
获取干支纪年的函数
干支纪年可通过年份计算得来(东汉以后)
drop function if exists getY2TGDZ(int);
create function getY2TGDZ(p_year int)
returns varchar(20) with (not variant);
define v_tg int;
define v_dz int;
-- 天干:mod(年份,10),前移3
let v_tg = mod(p_year,10)+7;
if v_tg > 10 then
let v_tg = v_tg - 10;
end if;
-- 地支:mod(年份,12),前移3
let v_dz = mod(p_year,12)+9;
if v_dz > 12 then
let v_dz = v_dz - 12;
end if;
return substr('甲乙丙丁戊己庚辛壬癸',v_tg,1) || substr('子丑寅卯辰巳午未申酉戌亥',v_dz,1);
end function;示例:
select getY2TGDZ(2025) as tz from dual;结果:
tz 乙巳 GBase 8s数据类型CLOB直接insert功能
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;