Linux 執行DB2資料庫匯入儲存過程/自定義函式指令碼檔案命令
匯入儲存過程/自定義函式: db2 -td@ -vf 檔名
其中,@是語句表示為結束符。
執行自定義函式指令碼: db2 -td@ -vf holidayfunction.sql
檔案內容:
CREATE FUNCTION getworkdate(in_date date,in_num INT)
RETURNS date
BEGIN
DECLARE re_num INT;
DECLARE re_i INT DEFAULT 0;
DECLARE re_count INT ;
DECLARE re_date date;
SET re_num =in_num;
IF in_num>0
THEN
WHILE in_num>0 DO
set re_i=re_i+1;
SET re_count=(SELECT count(*) FROM BANKHOLIDAY where HOLIDAYSTART<=(in_date+re_i days) AND HOLIDAYEND>=(in_date+re_i days) AND HOLIDAYSTATE='00');
IF re_count=0
THEN
IF DAYOFWEEK(in_date+re_i days)=1
THEN set re_num=re_num+1;
ELSEIF DAYOFWEEK(in_date+re_i days)=7
THEN set re_num=re_num+1;
ELSE set in_num=in_num-1;
END IF;
ELSE set re_num=re_num+1;
END IF;
END WHILE;
ELSE
WHILE in_num<0 DO
set re_i=re_i+1;
SET re_count=(SELECT count(*) FROM BANKHOLIDAY where HOLIDAYSTART<=(in_date-re_i days) AND HOLIDAYEND>=(in_date-re_i days) AND HOLIDAYSTATE='00');
IF re_count=0
THEN
IF DAYOFWEEK(in_date-re_i days)=1
THEN set re_num=re_num-1;
ELSEIF DAYOFWEEK(in_date-re_i days)=7
THEN set re_num=re_num-1;
ELSE set in_num=in_num+1;
END IF;
ELSE set re_num=re_num-1;
END IF;
END WHILE;
END IF;
RETURN in_date+re_num days ;
END
@ --(在此處新增一個@符號做為結束標誌,方便命令檢索 【db2 -td@ -vf holidayfunction.sql