函数场景:路径信息由若干个机构编码组成,且一个机构编码是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@
②执行Crate_func.sql文件,命令:db2 -td@ -svf Crate_func.sql
③执行成功会显示:DB20000I The SQL command completed successfully.
④注意事项:
.sql文件以"@"结尾;
执行@之前需要连接数据库db2 connect to 数据库名称;