我想了解下一個工作日排除SAT,SUN和假期。我收到如下錯誤的輸出。下一個工作日使用Oracle schdule
CREATE OR REPLACE FUNCTION FUNC_TO_GET_NEXT_BUSINESS_DAY(
P_DATE IN DATE
,P_ADD_NUM IN INTEGER
) RETURN DATE AS
--
V_CNT NUMBER;
V_BUS_DAY DATE := TRUNC(P_DATE);
--
BEGIN
--
SELECT MAX(RNUM)
INTO V_CNT
FROM (SELECT ROWNUM RNUM
FROM ALL_OBJECTS)
WHERE ROWNUM <= P_ADD_NUM
AND TO_CHAR(V_BUS_DAY + RNUM, 'DY') NOT IN ('SAT', 'SUN')
AND NOT EXISTS
(SELECT 1
FROM HOLIDAY_LIST
WHERE HDLY_DATE = V_BUS_DAY + RNUM);
V_BUS_DAY := V_BUS_DAY + V_CNT;
--
RETURN V_BUS_DAY;
EXCEPTION
WHEN OTHERS THEN
Raise_application_error(-20010, SQLERRM);
--
END FUNC_TO_GET_NEXT_BUSINESS_DAY;
/
輸入:
select FUNC_TO_GET_NEXT_BUSINESS_DAY(sysdate,1)+15/24 from dual;
輸出:
3/23/2076 3:00:00 PM
我剛剛編譯的函數,並測試了幾個日期,它正在產生正確的輸出。不知道爲什麼你在2076年得到一個約會...看看你的'HOLIDAY_LIST',以確保它是正確的。另外,我看到你命名爲HDLY_DATE專欄 - 不應該是HLDY_DATE嗎? – mathguy
幾乎從來沒有任何理由添加一個異常塊像什麼時候那樣的東西。只要允許通過內部機制引發的運行時異常。 – mathguy