CREATE OR REPLACE PROCEDURE SP_C_TXYYMM(VAPPLY_NO IN VARCHAR2,VUSER_NM IN VARCHAR2,VFAC_NO IN VARCHAR2)
AS
BEDATE VARCHAR2(10);
VTXKQ_NO VARCHAR2(2);
VITEM VARCHAR2(1);
EDDATE1 VARCHAR2(10);
VYEARPER VARCHAR2(4);
BEDATE1 VARCHAR2(10);
EDDATE VARCHAR2(10);
I INT;
ZZ INT;
NN INT;
CC INT;
DD INT;
CURSOR TXKQ IS SELECT START_DAY,END_DAY ,TXKQ_NO,YEARPER,APPLY_ITEM FROM A_QH_LEAVEAPPLY_DETAIL WHERE APPLY_NO=VAPPLY_NO;
BEGIN

OPEN TXKQ;
LOOP
FETCH TXKQ INTO BEDATE,EDDATE,VTXKQ_NO,VYEARPER,VITEM;
EXIT WHEN TXKQ%NOTFOUND;
SELECT MONTHS_BETWEEN (TO_DATE(SUBSTR(EDDATE,1,7),'YYYY/MM'), TO_DATE(SUBSTR(BEDATE,1,7),'YYYY/MM') ) INTO ZZ FROM DUAL;
FOR I IN 0..ZZ LOOP
BEDATE1:=TO_CHAR(ADD_MONTHS(TO_DATE(SUBSTR(BEDATE,1,7),'YYYY/MM'),I),'YYYY/MM')||'/01';
EDDATE1:=TO_CHAR(ADD_MONTHS(TO_DATE(SUBSTR(BEDATE,1,7),'YYYY/MM'),I),'YYYY/MM')||'/'||TO_CHAR(LAST_DAY(ADD_MONTHS(TO_DATE(SUBSTR(BEDATE,1,8)||'01','YYYY/MM/DD'),I)),'DD');
IF I=0 THEN
BEDATE1:=BEDATE;
END IF;
IF I=ZZ THEN
EDDATE1:=EDDATE;
END IF;
SELECT COUNT(*) A INTO CC FROM C_TXYYMM TX, A_QH_LEAVEAPPLY_DETAIL QH
WHERE (TX.FAC_NO=VFAC_NO OR TX.FAC_NO IN('HR','HGHR')) AND TX.FAC_NO=QH.FAC_NO AND TX.PNL=QH.PNL
AND BEDATE1||QH.START_TIME=SUBSTR(TX.YYMM,1,7)||'/'||TX.DAY_START
AND QH.APPLY_NO=VAPPLY_NO;

IF CC=0 THEN
IF VTXKQ_NO='3' THEN
INSERT INTO C_TXYYMM
SELECT DISTINCT A.FAC_NO,SUBSTR(BEDATE1,1,7)YYMM,A.PNL,B.SEC_NO,A.TXKQ_NO,
SUBSTR(BEDATE1,9,2)||A.START_TIME DAY_STAR,SUBSTR(EDDATE1,9,2)||A.END_TIME DAY_END
,NULL STATEMENT,DECODE(A.YEARPER,'',NULL,A.YEARPER) YEARPER,
DECODE(A.PERDAY1,'',NULL,A.PERDAY1) PERDAY1,
DECODE(A.PERDAY2,'',NULL,A.PERDAY2) PERDAY2 ,VUSER_NM,SYSDATE
FROM A_QH_LEAVEAPPLY_DETAIL A,P_PERSON B
WHERE (B.FAC_NO=VFAC_NO OR B.FAC_NO IN('HR','HGHR')) AND A.FAC_NO=B.FAC_NO AND A.PNL=B.PNL
AND APPLY_NO IN (SELECT APPLY_NO FROM APPLY
WHERE APPLY_NO=VAPPLY_NO)
AND B.INOUT_MK<>'Y' AND A.TXKQ_NO=VTXKQ_NO AND A.YEARPER=VYEARPER;
COMMIT;
ELSE
INSERT INTO C_TXYYMM
SELECT DISTINCT A.FAC_NO,SUBSTR(BEDATE1,1,7)YYMM,A.PNL,B.SEC_NO,A.TXKQ_NO,
SUBSTR(BEDATE1,9,2)||A.START_TIME DAY_STAR,SUBSTR(EDDATE1,9,2)||A.END_TIME DAY_END
,NULL STATEMENT,DECODE(A.YEARPER,'',NULL,A.YEARPER) YEARPER,
DECODE(A.PERDAY1,'',NULL,A.PERDAY1) PERDAY1,
DECODE(A.PERDAY2,'',NULL,A.PERDAY2) PERDAY2 ,VUSER_NM,SYSDATE
FROM A_QH_LEAVEAPPLY_DETAIL A,P_PERSON B
WHERE (A.FAC_NO=VFAC_NO OR A.FAC_NO IN('HR','HGHR')) AND A.FAC_NO=B.FAC_NO AND A.PNL=B.PNL
AND APPLY_NO IN (SELECT APPLY_NO FROM APPLY
WHERE APPLY_NO=VAPPLY_NO AND APPLY_ITEM=VITEM)
AND B.INOUT_MK<>'Y' AND A.TXKQ_NO=VTXKQ_NO;
COMMIT;
END IF;
ELSE
UPDATE C_TXYYMM C
SET (C.DAY_END,DATE_TIME,USER_NAME)=
(SELECT SUBSTR(EDDATE1,9,2)||END_TIME,SYSDATE,VUSER_NM
FROM A_QH_LEAVEAPPLY_DETAIL A
WHERE (C.FAC_NO=VFAC_NO OR C.FAC_NO IN('HR','HGHR')) AND C.FAC_NO=A.FAC_NO AND C.PNL=A.PNL AND A.APPLY_NO=VAPPLY_NO)
WHERE ( C.FAC_NO=VFAC_NO OR C.FAC_NO IN('HR','HGHR'))
AND EXISTS ( SELECT A.PNL FROM A_QH_LEAVEAPPLY_DETAIL A
WHERE (A.FAC_NO=VFAC_NO OR A.FAC_NO IN('HR','HGHR') )AND A.APPLY_NO=VAPPLY_NO
AND A.FAC_NO=C.FAC_NO AND A.PNL=C.PNL AND
C.YYMM||'/'||C.DAY_START=BEDATE1||A.START_TIME );

COMMIT;
END IF;
END LOOP;
END LOOP;
CLOSE TXKQ;

SELECT MONTHS_BETWEEN (TO_DATE(SUBSTR(EDDATE,1,7),'YYYY/MM'), TO_DATE(SUBSTR(BEDATE,1,7),'YYYY/MM') ) INTO NN FROM DUAL;
SELECT COUNT(*) INTO DD FROM A_QH_LEAVEAPPLY_DETAIL WHERE APPLY_NO=VAPPLY_NO AND (START_TIME='1300' OR END_TIME='1200') ;

-- IF (NN>0) THEN
IF (NN>0 AND DD>0) THEN
UPDATE C_TXYYMM C
SET (C.DAY_END)=
(SELECT SUBSTR(C.DAY_END,1,2)||'1700'
FROM A_QH_LEAVEAPPLY_DETAIL A
WHERE (C.FAC_NO=VFAC_NO OR C.FAC_NO IN('HR','HGHR')) AND C.FAC_NO=A.FAC_NO AND C.PNL=A.PNL AND A.APPLY_NO=VAPPLY_NO)
WHERE (C.FAC_NO=VFAC_NO OR C.FAC_NO IN('HR','HGHR'))
AND EXISTS ( SELECT A.PNL FROM A_QH_LEAVEAPPLY_DETAIL A
WHERE (A.FAC_NO=VFAC_NO OR A.FAC_NO IN('HR','HGHR')) AND A.APPLY_NO=VAPPLY_NO
AND A.FAC_NO=C.FAC_NO AND A.PNL=C.PNL
AND C.TXKQ_NO=A.TXKQ_NO AND SUBSTR(A.START_DAY,1,7)=C.YYMM
);

UPDATE C_TXYYMM C
SET (C.DAY_START)=
(SELECT SUBSTR(C.DAY_START,1,2)||'0730'
FROM A_QH_LEAVEAPPLY_DETAIL A
WHERE (C.FAC_NO=VFAC_NO OR C.FAC_NO IN('HR','HGHR')) AND C.FAC_NO=A.FAC_NO AND C.PNL=A.PNL AND A.APPLY_NO=VAPPLY_NO)
WHERE (C.FAC_NO=VFAC_NO OR C.FAC_NO IN('HR','HGHR'))
AND EXISTS ( SELECT A.PNL FROM A_QH_LEAVEAPPLY_DETAIL A
WHERE (A.FAC_NO=VFAC_NO OR C.FAC_NO IN('HR','HGHR')) AND A.APPLY_NO=VAPPLY_NO
AND A.FAC_NO=C.FAC_NO AND A.PNL=C.PNL
AND C.TXKQ_NO=A.TXKQ_NO AND SUBSTR(A.START_DAY,1,7)<C.YYMM
);

END IF;
/* UPDATE d_free_meat SET MEAT_MK='1' where free_mk<>'A' AND MEAT_MK='0';
UPDATE d_free_meat SET MEAT_MK='0' where free_mk='A' AND MEAT_MK<>'0' ; */
END;

ORACLE_簽核PROC帶游標的更多相关文章

  1. 网站繁简切换的JS遇到的一个BUG

    公司打算进入台湾市场,最近开发了繁体版本的网站,数据库里的信息全是简体,除了网页上固定的文字手动翻译了,文章内容标题都不是繁体. 于是在网上找了一段比较流行的繁简切换的JS实现了,不过后来却发现,有些 ...

  2. mud目录命令说明

      目錄結構 以下列出的是 ES2 mudlib 根目錄下標準的子目錄結構,以及簡短的說明. /adm 儲存由系統管理者所管理的程式與資料檔. /std 儲存標準物件的程式碼. /obj 儲存通用物件 ...

  3. Android常用元件

    本文来源于 http://blog.csdn.net/wxhlinux/article/details/8601170#comments 1.4  Android應用程式元件1.4.1  Activi ...

  4. ORACLE 學習筆記

    proc 里的 commit等于提交就是你做了insert或者update后,commit后才是真正修改或者插入了数据库中 如果不提交的话,那么这个表就被锁了 CURSOR MYCURSOR is   ...

  5. sql server存儲過程語法

    -- 变量的声明,sql里面声明变量时必须在变量前加@符号    DECLARE @I INT -- 变量的赋值,变量赋值时变量前必须加set    SET @I = 30 -- 声明多个变量    ...

  6. 鸟哥的linux私房菜---非常好的linux基础网址【转】

    转自:http://linux.vbird.org/linux_basic/0320bash.php 在 Linux 的環境下,如果你不懂 bash 是什麼,那麼其他的東西就不用學了!因為前面幾章我們 ...

  7. button属性值

    AccessibilityObject 取得指定給控制項的 AccessibleObject. (繼承自 Control). AccessibleDefaultActionDescription 取得 ...

  8. 鸟哥之安裝 CentOS7.x

    http://linux.vbird.org/linux_basic/0157installcentos7.php since 2002/01/01 新手建議 開始閱讀之前 網站導覽 Linux 基礎 ...

  9. 我的acm vim 备忘

    一.從命令到編輯模式 a :当前单词后面插入Appendi :当前位置插入Inserto :当前行下新开一行插入Open new lineA :当前行尾插入AppendI :当前行首插入InsertO ...

随机推荐

  1. Clustering with the ArcGIS API for Flex

    Clustering is an excellent technique for visualizing lotss of point data. We've all seen application ...

  2. js实现日历卡

    效果图如下 首先先添加简单的样式 <style type="text/css"> *{padding:0;margin:0;} #tab { margin:0 auto ...

  3. 汉诺塔算法详解之C++

    汉诺塔: 有三根杆子A,B,C.A杆上有N个(N>1)穿孔圆环,盘的尺寸由下到上依次变小.要求按下列规则将所有圆盘移至C杆: 每次只能移动一个圆盘: 大盘不能叠在小盘上面. 提示:可将圆盘临时置 ...

  4. Python之路【第十七篇】:Django【进阶篇 】

    Python之路[第十七篇]:Django[进阶篇 ]   Model 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接 ...

  5. ffmpeg去logo<转>

    用到 video filter —— delogo 通过周围像素插值去除 logo. 参数介绍: x y (必须)指定 logo 的坐标. w h (必须)指定 logo 的宽和高. band, t ...

  6. JavaScript 基础(七) 箭头函数 generator Date JSON

    ES6 标准新增了一种新的函数: Arrow Function(箭头函数). x => x *x 上面的箭头相当于: function (x){ return x*x; } 箭头函数相当于匿名函 ...

  7. LR工具使用之场景设置

    LR工具使用之场景设置 一.操作步骤 1.运行loadrunner,进入运行负载测试控件:

  8. JStorm注意事项

    storm.yaml的配置可以参照defaults.yaml,例如: nimbus.childopts: " -Xms256m -Xmx256m -XX:+UseConcMarkSweepG ...

  9. [纯小白学习OpenCV系列]官方例程01:Load and Display an Image

    Version: OpenCV 2.4.9 IDE    : VS2010 OS     : Windows --------------------------------------------- ...

  10. UVa 490 - Rotating Sentences

    https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=94&page=s ...