1. 程式人生 > >Linux 執行DB2資料庫匯入儲存過程/自定義函式指令碼檔案命令

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

】)