CREATE OR REPLACE FUNCTION get_date2(y number,
m number,
idx number, -- 第几个n
dow NUMBER -- 星期 m
) RETURN DATE IS
v_date DATE;
v_cnt NUMBER := 0;
BEGIN
IF idx NOT BETWEEN 1 AND 5 THEN
RETURN NULL;
END IF;
-- 上个月的最后一天.
v_date := TO_DATE(y || '-' || m, 'YYYY-MM') - 1;
WHILE TRUE LOOP
SELECT next_day(v_date, dow) INTO v_date FROM dual;
v_cnt := v_cnt + 1;
IF idx = v_cnt THEN
EXIT;
END IF;
END LOOP;
RETURN v_date;
END;