DB2数据库中创建自定义函数

516 阅读2分钟

1.创建自定义函数

因自带的函数无法满足自己想要的需求,故需自定义一个函数,也是第一次接触,里面遇见了很多的坑。。。汇总一下

1.1创建语句

create  or replace function 函数名([参数列表]) returns 数据类型(返回值的数据类型)
language sql
begin
    sql语句;
    return 值;
end;

举个例子

create or replace function aaa(a VARCHAR(16),b VARCHAR(16))
returns VARCHAR(16)
language sql
begin
    DECLARE RESULT VARCHAR(16);
    set RESULT = a / b;
    set RESULT = RESULT * 100;
    return cast(RESULT as int);
end;

这个方法是对传入的两个数进行相除,得到的结果在进行乘以100; 下面调用这个方法

image.png

这个在写的时候会遇到下面的几个坑。

第一个坑,传参计算得到的值不对

image.png 后来查了一下db2的资料,db2的运算算术是发现下面的规则: 论据1 论据2 结果 小数(a,b) 小数(c,d) 小数(p,s) p=MAX(最大(b,d)+最大(ab,cd) s=MAX(b,d) 但法的数位计算遵循以下规则:31-p+ss'(其中p为被除数的小数位,为被除数的小数位,s'为数的小数位) 意思就是1/5这个数据类型皆为int,所以结果为int 即结果为0

第二个坑,输出结果非法

image.png 这个是因为结果加了一个%导致的,具体怎么解决我最后也没去解决因为我这里对数据不影响,留给大佬去解决了。。。

第三个坑,没有加schema。。。

image.png 还有别的坑都是一点小问题,因为之前看的是按照MySQL的方式去做的,我实际的项目是在db2中建表的,所以遇到了几个小问题,这里就不一一贴出来了。