CREATE OR REPLACE PROCEDURE p_date_union (p_beg IN DATE, p_end IN DATE)
IS
ncount NUMBER;
v_left_in NUMBER;
v_right_in NUMBER;
v_p_beg_left INTEGER;
v_p_beg_right INTEGER;
v_p_end_left INTEGER;
v_p_end_right INTEGER;
v_beg_time DATE;
v_end_time DATE;
v_tmp_time DATE;
v_tmp_time2 DATE;
BEGIN
SELECT COUNT (t.time_beg)
INTO ncount
FROM mege_data_tg t;
IF ncount = 0
THEN
INSERT INTO mege_data_tg
(time_beg, time_end
)
VALUES (p_beg, p_end
);
COMMIT;
RETURN;
END IF;
--0.1处理边界情况;
SELECT COUNT (*)
INTO v_p_beg_left
FROM mege_data_tg t
WHERE t.time_beg = p_beg;
SELECT COUNT (*)
INTO v_p_beg_right
FROM mege_data_tg t
WHERE t.time_end = p_beg;
SELECT COUNT (*)
INTO v_p_end_left
FROM mege_data_tg t
WHERE t.time_beg = p_end;
SELECT COUNT (*)
INTO v_p_end_right
FROM mege_data_tg t
WHERE t.time_end = p_end;
--0.2首先是直接插入
--如果是属于其中一个区间的一部分,则不修要做任何操作
SELECT COUNT (t.time_beg)
INTO ncount
FROM mege_data_tg t
WHERE t.time_beg <= p_beg
AND p_beg <= t.time_end
AND t.time_beg <= p_end
AND p_end <= t.time_end;