函數場景:路徑資訊由若幹個機構編碼組成,且一個機構編碼是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 資料庫名稱;