oracle存储过程
oracle存储过程
开源中国-总书记 发表于1年前
oracle存储过程
  • 发表于 1年前
  • 阅读 8
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云实验室 1小时搭建人工智能应用,让技术更容易入门 免费体验 >>>   

摘要: 操作的表一定要大写,或者小写加引号 ; 存储过程的参数不要和操作表的参数相同; SELECT TRUNC(Date,'iw') 获取指定时间的当前的星期一; 记得commit

CREATE OR REPLACE 
PROCEDURE P_REPOST_WEEK_QF (STARTDATE in varchar2)IS
                FIRSTDAYDATE  DATE;
                LASTDAYDATE  DATE; 
                MONDAY DATE; 
                SUNDAY DATE; 
                STARTHALF DATE;
                ENDHALF   DATE;
                MAXDATE DATE;
                I INTEGER;
                J INTEGER;
                YEAR INTEGER;
BEGIN
            SELECT TO_DATE(STARTDATE,'yyyyMMdd') INTO FIRSTDAYDATE FROM DUAL;
            SELECT LAST_DAY(ADD_MONTHS(FIRSTDAYDATE,11)) INTO LASTDAYDATE FROM DUAL;
            MONDAY:=FIRSTDAYDATE;
      MAXDATE:=MONDAY;
            SELECT TRUNC(MONDAY,'iw') INTO SUNDAY FROM DUAL;    
            SELECT substr(STARTDATE, 0, 4) INTO YEAR FROM DUAL;
            I:=1;
            J:=1;
            WHILE (MAXDATE <= LASTDAYDATE) LOOP
                    SELECT TRUNC(SUNDAY,'iw')+6 INTO MONDAY FROM DUAL;
                    SELECT TRUNC(MONDAY,'iw')+6 INTO MAXDATE FROM DUAL;
                    SELECT TRUNC(SUNDAY,'iw')+2 INTO ENDHALF FROM DUAL;
                    SELECT TRUNC(SUNDAY,'iw')+3 INTO STARTHALF FROM DUAL;
                    IF MAXDATE>LASTDAYDATE 
                         THEN
                             return;
                    END IF;
                    INSERT INTO REPORT_WEEK_HALF(WD_YEAR,WD_NATURAL_WEEK,WD_START_DATE,WD_END_DATE)VALUES
                    (YEAR,J,to_char(SUNDAY,'yyyyMMdd'),to_char(ENDHALF,'yyyyMMdd'));

                    J:=J+1;
                    INSERT INTO REPORT_WEEK_HALF(WD_YEAR,WD_NATURAL_WEEK,WD_START_DATE,WD_END_DATE)VALUES
                    (YEAR,J,to_char(STARTHALF,'yyyyMMdd'),to_char(MONDAY,'yyyyMMdd'));

                    INSERT INTO REPORT_WEEK_ALL(WD_YEAR,WD_NATURAL_WEEK,WD_START_DATE,WD_END_DATE)VALUES 
                    (YEAR,I,to_char(SUNDAY,'yyyyMMdd'),to_char(MONDAY,'yyyyMMdd'));    
                    
                    SELECT TRUNC(SUNDAY,'iw')+7 INTO SUNDAY FROM DUAL;
                    I:=I+1;
                    J:=J+1;
                END LOOP;
                COMMIT;
END P_REPOST_WEEK_QF;
 

标签: oracle 存储过程
共有 人打赏支持
粉丝 6
博文 4
码字总数 439
×
开源中国-总书记
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: