首页 > 数据库 >Oracle 按工作日计算工单超期日期(跳过法定节假日)

Oracle 按工作日计算工单超期日期(跳过法定节假日)

时间:2025-01-08 17:45:53浏览次数:1  
标签:DATE RQ TEMP WORK JJRTXR Oracle 超期 工单 OUT

一、创建辅助表:用于存储 法定节假日调休日

点击查看代码

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;

标签:DATE,RQ,TEMP,WORK,JJRTXR,Oracle,超期,工单,OUT
From: https://www.cnblogs.com/qq564934147/p/18660247

相关文章

  • ORACLE数据库高水位线(high water mark)
    来源:ORACLE数据库高水位线(highwatermark)-墨天轮(modb.pro) 文档课题:ORACLE数据库高水位线(highwatermark).1、相关概念ORACLE数据库逻辑结构包括:数据库块(block),区(extent),段(segment),表空间(tablespace).高水位线存在于段中,用于标识段中已使用过的数据块与未使用过的......
  • CDS标准视图:维修工单实际成本数据 I_MaintOrderActualCostDataCube
    视图名称:维修工单实际成本数据I_MaintOrderActualCostDataCube视图类型:基础视图代码:点击查看代码@VDM.viewType:#COMPOSITE@AbapCatalog.sqlViewName:'IMTORDACTCOSTDC'@AbapCatalog.compiler.compareFilter:true@AbapCatalog.preserveKey:true@AccessControl.aut......
  • CDS标准视图:维修工单工艺数据 I_MAINTORDEROPERATIONDATA
    视图名称:维修工单工艺数据I_MAINTORDEROPERATIONDATA视图类型:基础视图代码:点击查看代码@EndUserText.label:'MaintenanceOrderOperationData'@VDM.viewType:#COMPOSITE@AccessControl.authorizationCheck:#CHECK@AbapCatalog.sqlViewName:'IPMORDOPERDATA'@Cli......
  • CDS标准视图:有技术对象的维修工单 I_MAINTORDERTECHOBJCUBE
    视图名称:有技术对象的维修工单I_MAINTORDERTECHOBJCUBE视图类型:基础视图代码:点击查看代码@EndUserText.label:'MaintenanceOrderWithTechObject-Cube'@VDM.viewType:#COMPOSITE@AbapCatalog.sqlViewName:'IMNTORDTOCUBE'@AccessControl.authorizationCheck:#......
  • ORACLE更改RAC集群IP
    RAC名称记录属性名称内网1/public网1ora11grac1内网2/public网2ora11grac2vip1ora11grac1vipvip2ora11grac2vipprivate1ora11grac1privprivate2ora11grac2privscanIPora11gracscan前置动作关闭数据库srvctlstopdatabase-dora11gsrv......
  • 查询Oracle正在执行和执行过的SQL语句
    --查询Oracle正在执行的sql语句及执行该语句的用户SELECTb.sidoracleID,      b.username登录Oracle用户名,      b.serial#,      spid操作系统ID,      paddr,      sql_text正在执行的SQL,      b.machine计算机名FROMv$pro......
  • Navicat连接Oracle数据库报错:oracle library is not loaded解决方法.240109
    连接Oracle时提示“oraclelibraryisnotloaded”。去Oracle官网下载OracleInstantClientDownloads。https://www.oracle.com/database/technologies/instant-client/downloads.html修改OCIlibrary下载好的文件包解压到D盘,记住路径。打开NavicatPremium程序,打开“......
  • sql运行慢,如何根据执行计划分析原因 oracle
    oracle的执行计划的语法是:EXPLAINPLANFOR sql语句;select*fromtable(dbms_xplan.display);第一行是生成执行计划,第二行是查看执行计划,一般一起执行.书写时,一般把sql语句换行输入代码:输出注意:有2个输出,Explain对应的是生成执行计划语句,没有输出结果,Sel......
  • distinct去重的局限性,建议优先使用group by或row_number() over() [oracle]
    my_table表的数据如下,其中Eve的那两行是name和age的数据均相同,Bob的两行name相同,但是age不同selectdistinctnamefrommy_table;查询结果如下图selectdistinctname,agefrommy_table;查询结果如下图.有重复的name数据(3个Bob).重复的name值Eve被去重了,Bob没有,因......
  • oracle中,为什么drop可以闪回/在回收站找回,而delete,truncate不可以
    1.闪回Oracle的闪回表功能(FlashbackTable)可以将表恢复到执行DROP操作之前的状态。此外,如果启用了回收站(RecycleBin),被drop删除的表会暂时存储在回收站中,直到被彻底删除。delete,truncate无法使用闪回表功能的原因:作用于表中的行,不是作用于表不过,delete在事务未提交前可......