ORACLE_簽核PROC帶游標
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帶游標的更多相关文章
- 网站繁简切换的JS遇到的一个BUG
公司打算进入台湾市场,最近开发了繁体版本的网站,数据库里的信息全是简体,除了网页上固定的文字手动翻译了,文章内容标题都不是繁体. 于是在网上找了一段比较流行的繁简切换的JS实现了,不过后来却发现,有些 ...
- mud目录命令说明
目錄結構 以下列出的是 ES2 mudlib 根目錄下標準的子目錄結構,以及簡短的說明. /adm 儲存由系統管理者所管理的程式與資料檔. /std 儲存標準物件的程式碼. /obj 儲存通用物件 ...
- Android常用元件
本文来源于 http://blog.csdn.net/wxhlinux/article/details/8601170#comments 1.4 Android應用程式元件1.4.1 Activi ...
- ORACLE 學習筆記
proc 里的 commit等于提交就是你做了insert或者update后,commit后才是真正修改或者插入了数据库中 如果不提交的话,那么这个表就被锁了 CURSOR MYCURSOR is ...
- sql server存儲過程語法
-- 变量的声明,sql里面声明变量时必须在变量前加@符号 DECLARE @I INT -- 变量的赋值,变量赋值时变量前必须加set SET @I = 30 -- 声明多个变量 ...
- 鸟哥的linux私房菜---非常好的linux基础网址【转】
转自:http://linux.vbird.org/linux_basic/0320bash.php 在 Linux 的環境下,如果你不懂 bash 是什麼,那麼其他的東西就不用學了!因為前面幾章我們 ...
- button属性值
AccessibilityObject 取得指定給控制項的 AccessibleObject. (繼承自 Control). AccessibleDefaultActionDescription 取得 ...
- 鸟哥之安裝 CentOS7.x
http://linux.vbird.org/linux_basic/0157installcentos7.php since 2002/01/01 新手建議 開始閱讀之前 網站導覽 Linux 基礎 ...
- 我的acm vim 备忘
一.從命令到編輯模式 a :当前单词后面插入Appendi :当前位置插入Inserto :当前行下新开一行插入Open new lineA :当前行尾插入AppendI :当前行首插入InsertO ...
随机推荐
- window7下使用vagrant打造lamp开发环境(一)
前言: 公司电脑只有win7 + (xampp || wamp)开发,处于个人爱好,想学习下在最舒服的开发环境下开发,也不想安装双系统,想用Vmware电脑却配置不高,vagrant+virtual ...
- C/C++ 右值引用 及 函数调用栈剖析
参考: [1]. C/C++堆栈指引: http://www.cnblogs.com/Binhua-Liu/archive/2010/08/24/1803095.html [2]. C++临时变量的生 ...
- ASPxSpinEdit 控件的三元判断
方法一:<dx:ASPxSpinEdit ID=" DisplayFormatString="c" Width="100px"></ ...
- Flask First Look
from flask import Flask app = Flask(__name__) @app.route("/") def hello(): return "He ...
- C#算法之向一个集合中插入随机不重复的100个数
一道非常经典的C#笔试题: 需求:请使用C#将一个长度为100的int数组,插入1-100的随机数,不能重复,要求遍历次数最少. 1.最简单的办法 var rd = new Random(); Lis ...
- 关于Nios II的启动分析(转载)
原文地址:http://hi.baidu.com/goatdai/item/cc33671545d89243e75e06ad 常用到的存储器包括SDRMA.SRAM.FLASH.Onchip_memo ...
- asp.net mvc 如何将controller 里一个action 返回值为list<>的值输出到view
在controller中:return View(myRole.ToList());在view文件开头加上:@model IEnumerable<LTXYCallCenter.Models.Ro ...
- (十) 一起学 Unix 环境高级编程 (APUE) 之 线程控制
. . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...
- 奇怪的margin,padding,table
为什么有的时候margin,padding不管用?写了float以后就管用了? 为什么table 不给width,就默认是100%,里面的td会平均分配teble的宽度,若你想给其中一些td宽度,剩下 ...
- Selenium2+python自动化26-js处理内嵌div滚动条
前言 前面有篇专门用js解决了浏览器滚动条的问题,生活总是多姿多彩,有的滚动条就在页面上,这时候又得仰仗js大哥来解决啦. 一.内嵌滚动条 1.下面这张图就是内嵌div带有滚动条的样子,记住它的长相.