两种方式,创建有返回值的DB2函数

函数场景:路径信息由若干个机构编码组成,且一个机构编码是9位字符。 要求:获取路径信息,并且删除路径中包含‘99’开头的机构编码。

从客户端及服务器端分别创建ignore99(pathinfo varchar(1800))函数

1、在DbVisualizer中创建实现上述功能的函数

 1 --/
 2 CREATE FUNCTION ignore99 (pathinfo VARCHAR(1800)) RETURNS VARCHAR(1800) LANGUAGE SQL
 3 BEGIN ATOMIC
 4 DECLARE V_ORGCODE CHAR(9);--
 5 DECLARE I_NUMBER INT;--
 6 DECLARE I_INDEX INT;--
 7 DECLARE V_PATHSTR VARCHAR(1800);--
 8 
 9 set I_NUMBER=length(pathinfo)/9;--
10 set I_INDEX=0;--
11 set V_PATHSTR='';--
12 WHILE I_NUMBER>0 DO--
13     set V_ORGCODE=substr(pathinfo, I_INDEX*9+1, 9);--
14     IF V_ORGCODE not like '99%' THEN --
15     set V_PATHSTR = CONCAT(V_PATHSTR,V_ORGCODE);--
16     END IF;--
17     set I_INDEX = I_INDEX + 1;--
18     set I_NUMBER = I_NUMBER - 1;--
19 END WHILE;--
20     RETURN V_PATHSTR;--
21 END
22 /

在DbVisualizer创建函数的几个注意事项
①在DbVisualizer创建函数
以"--/"开头,以"/"结尾
②最后的end后面没有";"
③传入的参数varchar 型的要定义长度
④"BEGIN ATOMIC"表示下面的程序块是一个事务
⑤变量的赋值格式: set 变量名=变量值,要加"set"关键字

2、在Linux服务器端,创建一个成功的DB2函数

①先创建Crate_func.sql文件,将ignore99(pathinfo varchar(1800))写入Crate_func.sql文件

CREATE FUNCTION ignore99 (pathinfo VARCHAR(1800)) RETURNS VARCHAR(1800) LANGUAGE SQL
BEGIN ATOMIC
DECLARE V_ORGCODE CHAR(9);--
DECLARE I_NUMBER INT;--
DECLARE I_INDEX INT;--
DECLARE V_PATHSTR VARCHAR(1800);--

set I_NUMBER=length(pathinfo)/9;--
set I_INDEX=0;--
set V_PATHSTR='';--
WHILE I_NUMBER>0 DO--
    set V_ORGCODE=substr(pathinfo, I_INDEX*9+1, 9);--
    IF V_ORGCODE not like '99%' THEN --
    set V_PATHSTR = CONCAT(V_PATHSTR,V_ORGCODE);--
    END IF;--
    set I_INDEX = I_INDEX + 1;--
    set I_NUMBER = I_NUMBER - 1;--
END WHILE;--
    RETURN V_PATHSTR;--
END@
View Code

②执行Crate_func.sql文件,命令:db2 -td@ -svf Crate_func.sql
③执行成功会显示:DB20000I  The SQL command completed successfully.

④注意事项:

.sql文件以"@"结尾;

执行@之前需要连接数据库db2 connect to 数据库名称;

 

posted @ 2019-07-11 14:05  HANDHEAD  阅读(1166)  评论(0编辑  收藏  举报