一、创建辅助表:用于存储 法定节假日调休日
点击查看代码
create table TEMP_JJRTXR
(
rq DATE not null,
lx NUMBER not null,
zt NUMBER not null
)
tablespace USR_xxx_TBS
pctfree 10
initrans 1
maxtrans 255;
-- Add comments to the table
comment on table TEMP_JJRTXR
is '临时_节假日调休日';
-- Add comments to the columns
comment on column TEMP_JJRTXR.rq
is '日期';
comment on column TEMP_JJRTXR.lx
is '类型:1=节假日,2=调休后补工作日';
comment on column TEMP_JJRTXR.zt
is '状态:1=正常,0=废弃';
-- Create/Recreate indexes
create unique index TEMP_JJRTXR_RQ on TEMP_JJRTXR (RQ)
tablespace USR_HNMP_TBS
pctfree 10
initrans 2
maxtrans 255
nologging;
二、百度搜索节假日、调休日数据导入上表
三、创建辅助函数
点击查看代码
-- 辅助函数:判断是否是工作日:Y/N
CREATE OR REPLACE FUNCTION IS_WORK_DATE(
IN_RQ IN DATE
)
RETURN VARCHAR2 AS
T_IS_WORK_DATE VARCHAR2(10):='';
BEGIN
SELECT CASE WHEN
(
TO_CHAR(IN_RQ, 'D') NOT IN (7, 1)
AND IN_RQ NOT IN (SELECT RQ FROM TEMP_JJRTXR WHERE LX=1 )
) OR
(
TO_CHAR(IN_RQ, 'D') IN (7, 1)
AND IN_RQ IN (SELECT RQ FROM TEMP_JJRTXR WHERE LX=2 )
) THEN 'Y' ELSE 'N' END INTO T_IS_WORK_DATE FROM DUAL;
RETURN T_IS_WORK_DATE;
END;
-- 获取工单超时日期
CREATE OR REPLACE FUNCTION FUN_GET_OUT_DATE(
IN_RQ IN DATE,
IN_COUNT IN NUMBER
)
/*
辅助函数:
按指定日期,跳过节假日,累加指定天数
返回:超期日期
*/
RETURN DATE AS
T_OUT_DATE DATE:=IN_RQ;
T_IS_WORK_DATE VARCHAR2(10):='N';
BEGIN
FOR I IN 1..IN_COUNT LOOP
WHILE T_IS_WORK_DATE='N' LOOP
T_OUT_DATE := T_OUT_DATE + 1;
SELECT IS_WORK_DATE(T_OUT_DATE) INTO T_IS_WORK_DATE FROM DUAL;
/*IF T_IS_WORK_DATE='Y' THEN
DBMS_OUTPUT.put_line(T_OUT_DATE);
DBMS_OUTPUT.put_line(T_IS_WORK_DATE);
END IF;*/
END LOOP;
T_IS_WORK_DATE:='N';
END LOOP;
RETURN T_OUT_DATE;
END;
四、根据工单创建日期与限制天天数,获取超期日期
SELECT FUN_GET_OUT_DATE(TO_DATE('2021-01-01','YYYY-MM-DD'),10) FROM DUAL;