默认分类,存储过程
存储过程开发,编写,兼容性函数。

获取干支纪年的函数

干支纪年可通过年份计算得来(东汉以后)

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 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自定义使用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;

阅读全文»