Oracle存储过程循环判断并插入数据,今天是周几

在表中插入一年年初到年末的日期(YYYY-MM-DD)并判断是什么标志(标志:工作日[周一到周四]. 周五 .周末).

1.创建表

create table test_day(
      v_day varchar2(20) not null,   -- 日期 格式:YYYY-MM-DD
      v_day2 varchar2(20) not null   -- 标志:工作日(周一到周四) 周五  周末
)

2.编写存储过程

--循环判断插入日期类型
CREATE OR REPLACE PROCEDURE SP_PDSJ(P IN VARCHAR2) IS -- 结果
    V_BEGIN VARCHAR2(30) := TO_CHAR(trunc(sysdate,'yyyy'),'YYYY-MM-DD');
    V_END   VARCHAR2(30) := TO_CHAR(add_months(trunc(sysdate,'yyyy'),12)-1,'YYYY-MM-DD');
    
    V_DATE_EMP VARCHAR2(30) := V_BEGIN;
    V_FLAG VARCHAR2(30) := '';
    V_DAY VARCHAR2(30) := '';-- 需要的
BEGIN  
    while V_DATE_EMP < V_END 
    loop
        -- 判断星期几
        select to_char(TO_DATE(V_DATE_EMP,'YYYY-MM-DD'),'day') into V_FLAG from dual;
        -- 中间调整
        IF V_FLAG ='星期一' or V_FLAG ='星期二' or V_FLAG ='星期三' or V_FLAG ='星期四' THEN
               V_FLAG := '工作日'; 
        ELSIF V_FLAG ='星期五' THEN
               V_FLAG := '周五';
        ELSIF V_FLAG ='星期六' or V_FLAG ='星期天' THEN
               V_FLAG := '周末';
        END IF;
        DBMS_OUTPUT.put_line(V_DATE_EMP||':'||V_FLAG);
        insert into test_day(v_day,v_day2) values (V_DATE_EMP,V_FLAG);
        commit;
        -- 加一天
        SELECT TO_CHAR(TO_DATE(V_DATE_EMP,'YYYY-MM-DD')+1,'YYYY-MM-DD') INTO V_DATE_EMP FROM DUAL;
        DBMS_OUTPUT.put_line(V_DATE_EMP);
    end loop;
END;

3.运行存储过程

BEGIN 
    SP_PDSJ('2019-01-05');
END;

你可能感兴趣的:(数据库)