刚刚写的ORACLE存储过程
来源:互联网 发布:python 频域 编辑:程序博客网 时间:2024/05/08 22:56
CREATE OR REPLACE PROCEDURE P_SubtractPoint(uMsg OUT VARCHAR2)-- 在冻结、锁定、退单等要求减点数的操作中执行减点工作-- SW_HYCJ 会员处理表,记录退单、锁定、冻结的会员记录AS-- 定义游标,将未处理的记录检索出来CURSOR C_HYCL IS SELECT XH,UPPER(HYBH) HYBH,CLSJ,DS,HYZT FROM SW_HYCL WHERE CLID = 0;uXH NUMBER;uHYBH VARCHAR2(20);uCLSJ DATE;uDS NUMBER;uHYZT VARCHAR2(20);uFJDBH VARCHAR2(20);uFJDQY VARCHAR2(20);uMAX_CS NUMBER;uCS NUMBER;uExist NUMBER;uAZD NUMBER;uBZD NUMBER;uLPC NUMBER; uINC NUMBER;uAPQ NUMBER;uAPH NUMBER;uBPQ NUMBER;uBPH NUMBER;uCOUNTA NUMBER;uCOUNTB NUMBER;-- 进入事务处理流程BEGIN -- 进入游标处理流程 FOR CC_HYCL IN C_HYCL LOOP uXH := CC_HYCL.XH; uHYBH := CC_HYCL.HYBH; uCLSJ := CC_HYCL.CLSJ; uDS := CC_HYCL.DS; uHYZT := CC_HYCL.HYZT; -- 获得标志,是否存在该会员编号的父节点记录 SELECT COUNT(*) INTO uExist FROM SW_FZB WHERE UPPER(HYBH) = uHYBH; -- 判断是否存在父节点记录 IF (uExist > 0 ) THEN -- 如果存在 -- 获得该会员所属团队的量碰层 SELECT LPC INTO uLPC FROM SW_CSB WHERE fGroup = F_GetGroup(uHYBH) AND uCLSJ >= KSSJ AND uCLSJ <= JSSJ; -- 获得最小层数和最大层数,准备循环处理每一层的父节点 SELECT MIN(FJDCS),MAX(FJDCS) INTO uCS,uMAX_CS FROM SW_FZB WHERE UPPER(HYBH) = uHYBH; -- 按层数循环开始处理每个父节点 WHILE uCS <= uMAX_CS LOOP -- 获得指定层的父节点的编号、区域 SELECT UPPER(FJDBH),FJDQY INTO uFJDBH,uFJDQY FROM SW_FZB WHERE UPPER(HYBH) = uHYBH AND FJDCS = uCS; -- 获得A、B区的余额点数和A、B区的总点数 SELECT AQYEDS,BQYEDS,AQLJDS,BQLJDS INTO uAPQ,uBPQ,uAZD,uBZD FROM SW_HYB WHERE UPPER(HYBH) = uFJDBH; uINC := uDS; --考虑大于量碰层后再增加点数 IF (uCS + uLPC - 1) > uMAX_CS THEN uINC := 0; END IF; -- 判断父节点的区域 IF (uFJDQY = 'A区') THEN uAPH := uAPQ - uINC; uAZD := uAZD - uDS; UPDATE SW_HYB SET AQLJRS = AQLJRS - 1, AQLJDS = AQLJDS - uDS, AQYEDS = AQYEDS - uINC WHERE UPPER(HYBH) = uFJDBH; ELSE uBPH := uBPQ - uINC; uBZD := uBZD - uDS; UPDATE SW_HYB SET BQLJRS = BQLJRS - 1, BQLJDS = BQLJDS - uDS, BQYEDS = BQYEDS - uINC WHERE UPPER(HYBH) = uFJDBH; END IF; -- 开始处理职务问题 -- 先处理主任级别的职务 IF (uAZD < 400 OR uBZD < 400) THEN SELECT COUNT(*) INTO uExist FROM SW_ZWB WHERE UPPER(HYBH) = uFJDBH AND ZWMC='主任'; IF uExist > 0 THEN DELETE FROM SW_ZWB WHERE UPPER(HYBH) = uFJDBH AND ZWMC='主任'; UPDATE SW_ZWB SET ZWMC = '' WHERE UPPER(HYBH) = uFJDBH; END IF; END IF; -- 处理经理级别的职务 -- 计算A、B区的主任人数 SELECT COUNT(*) INTO uCOUNTA FROM SW_FZB WHERE UPPER(FJDBH) = uFJDBH AND FJDQY ='A区' AND HYBH IN (SELECT HYBH FROM SW_ZWB WHERE ZWMC = '主任'); SELECT COUNT(*) INTO uCOUNTB FROM SW_FZB WHERE UPPER(FJDBH) = uFJDBH AND FJDQY ='B区' AND HYBH IN (SELECT HYBH FROM SW_ZWB WHERE ZWMC = '主任'); IF (uCOUNTA = 0 OR uCOUNTB = 0) THEN SELECT COUNT(*) INTO uExist FROM SW_ZWB WHERE UPPER(HYBH) = uFJDBH AND ZWMC = '经理'; IF uExist > 0 THEN DELETE FROM SW_ZWB WHERE UPPER(HYBH) = uFJDBH AND ZWMC='经理'; UPDATE SW_ZWB SET ZWMC = '主任' WHERE UPPER(HYBH) = uFJDBH; END IF; END IF; -- 处理总监级别的职务 -- 计算A、B区的经理人数 SELECT COUNT(*) INTO uCOUNTA FROM SW_FZB WHERE UPPER(FJDBH) = uFJDBH AND FJDQY ='A区' AND HYBH IN (SELECT HYBH FROM SW_ZWB WHERE ZWMC = '经理'); SELECT COUNT(*) INTO uCOUNTB FROM SW_FZB WHERE UPPER(FJDBH) = uFJDBH AND FJDQY ='B区' AND HYBH IN (SELECT HYBH FROM SW_ZWB WHERE ZWMC = '经理'); IF (uCOUNTA = 0 OR uCOUNTB = 0) THEN SELECT COUNT(*) INTO uExist FROM SW_ZWB WHERE UPPER(HYBH) = uFJDBH AND ZWMC = '总监'; IF uExist > 0 THEN DELETE FROM SW_ZWB WHERE UPPER(HYBH) = uFJDBH AND ZWMC='总监'; UPDATE SW_ZWB SET ZWMC = '经理' WHERE UPPER(HYBH) = uFJDBH; END IF; END IF; -- 修改 SW_Change ,加入相关变动数据 DELETE FROM SW_Change WHERE F_Source = uHYBH AND F_Father = uFJDBH AND F_RQ = uCLSJ AND F_BZ = uHYZT; INSERT INTO SW_Change (F_XH,F_RQ,F_Source,F_Father,F_Point,F_AQ,F_BQ,F_AH,F_BH,F_JE,F_AREA,F_BZ,F_DESC) VALUES (CHANGE_XH.NEXTVAL,uCLSJ,uHYBH,uFJDBH,uDS,uAPQ,uBPQ,uAPH,uBPH,0,uFJDQY,uHYZT,uHYZT||'减点处理'); -- 层数加1,继续循环处理下一个父节点 uCS := uCS + 1; END LOOP; END IF; -- 设置该记录为已处理 UPDATE SW_HYCL SET CLID = 1 WHERE XH = uXH; END LOOP; COMMIT; uMsg := '会员处理事务成功!';EXCEPTION WHEN Others THEN ROLLBACK; uMsg := '会员处理事务失败!';END P_SubtractPoint;-- 手工添加错误信息-- RAISE_APPLICATION_ERROR(-20010, 'ERROR:违反唯一索引约束!');
0 0
- 刚刚写的ORACLE存储过程
- Oracle的存储过程怎么写呀?
- 存储过程写的oracle 分页查询
- oracle sqlplus 写存储过程
- oracle如何写存储过程
- 刚刚写的功能不错的分页存储过程,可支持多表查询,任意排序。(转)
- 写oracle存储过程的一点小经验
- 自己写的oracle存储过程会用到
- oracle学习笔记---写存储过程时可能用到的
- Oracle的存储过程。
- Oracle的存储过程
- oracle的存储过程
- oracle的存储过程
- Oracle的存储过程
- oracle的存储过程
- Oracle的存储过程
- oracle的存储过程
- oracle的存储过程
- Android官方开发文档Training系列课程中文版:创建自定义View之View的创建
- C++ : :新特性之引用
- 【记录】窗口看门狗
- NOIP 2013 小朋友的数字
- MATLAB中diag函数的作用
- 刚刚写的ORACLE存储过程
- Java线程池基本使用
- 使用Intent方式进行跨进程访问
- Qt5 UI信号、槽自动连接的控件重名大坑
- 表格汇总器(C#)
- Cocos2d-x 内存管理
- 解决List的add方法错使前面的元素被覆盖成相同值
- Mapreduce wordCount
- Moto XT1085 国行 解锁BL