1.java代码
Map<String, Object> map = (Map<String, Object>) vm;
// 取数据
order_item_id = (BigDecimal) map.get("order_item_id");
cust_order_id = (BigDecimal) map.get("cust_order_id");
//10新装订购 15拆机退订
service_offer_id = (BigDecimal) map.get("service_offer_id");
//业务主键
order_item_obj_id = (BigDecimal) map.get("order_item_obj_id");
//T20增值产品 T03主产品
order_item_cd = (String) map.get("order_item_cd");
Map<String, Object> paraMap = new HashMap<String, Object>();
paraMap.put("cust_order_id", cust_order_id);
paraMap.put("order_item_id", order_item_id);
paraMap.put("service_offer_id", service_offer_id);
paraMap.put("order_item_obj_id", order_item_obj_id);
paraMap.put("order_item_cd", order_item_cd);
ibatisTemplate.queryForObject("OrderAndActive.completionProcedure", paraMap);
2.xml配置文件
<!-- 竣工更改为存储过程 -->
<parameterMap class="java.util.Map" id="completionMap">
<parameter property="cust_order_id" mode="IN"/>
<parameter property="order_item_id" mode="IN"/>
<parameter property="service_offer_id" mode="IN"/>
<parameter property="order_item_obj_id" mode="IN"/>
<parameter property="order_item_cd" mode="IN"/>
</parameterMap>
<procedure id="completionProcedure" parameterMap="completionMap">
{ call PK_VSOP_COMLETION.P_VSOP_COMLETION(?,?,?,?,?) }
</procedure>
3.存储过程代码
CREATE OR REPLACE PACKAGE BODY PK_VSOP_COMLETION IS
/**
* 模块名称: VSOP增值业务交付平台 - 订单项竣工
* 功 能: 订单项竣工
* 设 计人: 赵兴国(VSOP增值业务交付平台V1.0)
* 时 间: 2010-08-26
**/
PROCEDURE P_VSOP_COMLETION(
I_CUST_ORDER_ID IN NUMBER, --订单ID
I_ORDER_ITEM_ID IN NUMBER, --订单项ID
I_SERVICE_OFFER_ID IN NUMBER, --10新装订购 15拆机退订
I_ORDER_ITEM_OBJ_ID IN NUMBER, --业务主键
I_ORDER_ITEM_CD IN VARCHAR2 --T20增值产品 T03主产品 T05附属产品
) IS
V_CUST_ORDER_ID NUMBER(12); --订单ID
V_ORDER_ITEM_ID NUMBER(12); --订单项ID
V_SERVICE_OFFER_ID NUMBER(12); --10新装订购 15拆机退订
V_ORDER_ITEM_OBJ_ID NUMBER(12); --业务主键
V_ORDER_ITEM_CD VARCHAR2(10); --T20增值产品 T03主产品 T05附属产品
return_sub_cur COMMCUR;
returnSubSyn RETURN_SUB_SYN%ROWTYPE;
V_COUNT NUMBER;
V_PROD_INST_ID VARCHAR2(30);
BEGIN
V_CUST_ORDER_ID := I_CUST_ORDER_ID;
V_ORDER_ITEM_ID := I_ORDER_ITEM_ID;
V_SERVICE_OFFER_ID := I_SERVICE_OFFER_ID;
V_ORDER_ITEM_OBJ_ID := I_ORDER_ITEM_OBJ_ID;
V_ORDER_ITEM_CD := I_ORDER_ITEM_CD;
--首先竣工订单项
EXECUTE IMMEDIATE 'update order_item t set t.status = ''2002'' , t.status_date = sysdate where t.order_item_id = :1'
USING V_ORDER_ITEM_ID;
--条件符合,就进行拆机操作
IF V_ORDER_ITEM_CD = 'T03' AND V_SERVICE_OFFER_ID = '15' THEN
--拆机操作
EXECUTE IMMEDIATE 'SELECT B.PROD_INST_ID
FROM ORDER_ITEM A, ORDER_RELATION B
WHERE A.ORDER_ITEM_OBJ_ID = B.ORDER_RELATION_ID
AND A.ORDER_ITEM_ID = :V_ORDER_ITEM_ID'
INTO V_PROD_INST_ID
USING V_ORDER_ITEM_ID;
--拆主产品
EXECUTE IMMEDIATE 'UPDATE PROD_INST T SET T.STATE_CD = ''1101'' AND T.PROD_INST_ID = :1'
USING V_PROD_INST_ID;
--拆附属产品
EXECUTE IMMEDIATE 'UPDATE TB_PRD_VSOP_SUBPRD_INST T SET T.STATE_CD = ''1101'' WHERE T.PROD_INST_ID = :1'
USING V_PROD_INST_ID;
--拆订购关系
EXECUTE IMMEDIATE 'UPDATE ORDER_RELATION O
SET O.STATE = ''1101'',O.MODIFY_TIME = SYSDATE
WHERE O.PROD_INST_ID = (SELECT B.PROD_INST_ID
FROM ORDER_ITEM A, ORDER_RELATION B
WHERE A.ORDER_ITEM_OBJ_ID = B.ORDER_RELATION_ID
AND A.ORDER_ITEM_ID = :1)'
USING V_ORDER_ITEM_ID;
RETURN;
END IF;
--判断是否要竣工订单(查询此订单下是否存在没有竣工且不是套餐的订单项)
EXECUTE IMMEDIATE 'SELECT COUNT(1)
FROM CUSTOMER_ORDER A
WHERE EXISTS (SELECT B.CUST_ORDER_ID
FROM ORDER_ITEM B
WHERE B.STATUS != ''2002''
AND B.ORDER_ITEM_CD != ''T06''
AND B.CUST_ORDER_ID = A.CUST_ORDER_ID)
AND A.CUST_ORDER_ID = :1'
INTO V_COUNT
USING V_CUST_ORDER_ID;
--如果V_COUNT等于0,则竣工订单,当前订单项,以及套餐并为同步准备数据
IF V_COUNT=0 THEN
--竣工订单时同时竣工套餐(T06的订单项)
EXECUTE IMMEDIATE 'update ORDER_ITEM a set a.status = ''2002'', a.status_date = sysdate where a.order_item_cd = ''T06'' and a.cust_order_id = :1'
USING V_CUST_ORDER_ID;
--竣工订单
EXECUTE IMMEDIATE 'update customer_order t set t.status = ''900'' , t.status_date = sysdate where t.cust_order_id = :1'
USING V_CUST_ORDER_ID;
--为订购结果通知准备数据
OPEN return_sub_cur FOR 'SELECT DISTINCT (A.OTHER_SYS_ORDER_ID) AS CUST_ORDER_ID,
E.PRODUCT_NBR,
D.ACC_NBR,
A.ORDER_CHANNEL
FROM CUSTOMER_ORDER A,
ORDER_ITEM B,
ORDER_RELATION C,
PROD_INST D,
PRODUCT E
WHERE A.CUST_ORDER_ID = B.CUST_ORDER_ID
AND B.ORDER_ITEM_OBJ_ID = C.ORDER_RELATION_ID
AND C.PROD_INST_ID = D.PROD_INST_ID
AND D.PRODUCT_ID = E.PRODUCT_ID
AND B.ORDER_ITEM_CD = ''T20''
AND A.OTHER_SYS_ORDER_ID IS NOT NULL
AND A.ORDER_CHANNEL IN
(SELECT T.SYSTEM_CODE
FROM SYSTEM_INFO_ATTR T
WHERE T.ATTR_NAME = ''returnsub_syn'')
AND A.STATUS = ''900''
AND A.CUST_ORDER_ID = :1'
USING V_CUST_ORDER_ID;
LOOP
FETCH return_sub_cur INTO returnSubSyn.Cust_Order_Id,returnSubSyn.Product_Nbr,returnSubSyn.Acc_Nbr,returnSubSyn.Order_Channel;
EXIT WHEN return_sub_cur%NOTFOUND;
END LOOP;
IF returnSubSyn.Cust_Order_Id IS NOT NULL AND length(returnSubSyn.Cust_Order_Id)>0 THEN
EXECUTE IMMEDIATE 'INSERT INTO RETURN_SUB_SYN (RETURN_SUB_SYN_ID,CUST_ORDER_ID,PRODUCT_NBR,ACC_NBR,ORDER_CHANNEL,ADD_TIME)
VALUES(SEQ_VSOP_RETURN_SUB_SYN_ID.nextval,:2,:3,:4,:5,SYSDATE)'
USING returnSubSyn.Cust_Order_Id,returnSubSyn.Product_Nbr,returnSubSyn.Acc_Nbr,returnSubSyn.Order_Channel;
END IF;
--为订购关系向集团同步准备数据
EXECUTE IMMEDIATE 'INSERT INTO ORDER_ITEM_ACTIVE
(ORDER_ITEM_ID,
CUST_ORDER_ID,
SERVICE_OFFER_ID,
ORDER_ITEM_CD,
ORDER_ITEM_OBJ_ID,
CUST_WORKSHEET_ID,
STATUS,
STATUS_DATE,
STATE_CHANGE_REASON,
PRIORITY,
PRE_HANDLE_FLAG,
HANDLE_TIME,
ARCHIVE_DATE,
FINISH_TIME,
RECODE_ID)
SELECT T1.ORDER_ITEM_ID,
T1.CUST_ORDER_ID,
T1.SERVICE_OFFER_ID,
T1.ORDER_ITEM_CD,
T1.ORDER_ITEM_OBJ_ID,
T1.CUST_WORKSHEET_ID,
''2001'',
T1.STATUS_DATE,
T1.STATE_CHANGE_REASON,
T1.PRIORITY,
T1.PRE_HANDLE_FLAG,
T1.HANDLE_TIME,
T1.ARCHIVE_DATE,
T1.FINISH_TIME,
SEQ_VSOP_ORDITEMACT_RECODEID.NEXTVAL
FROM ORDER_ITEM T1,
PROD_INST T2,
ORDER_RELATION T3,
PRODUCT T4,
PRODUCT_SYSTEM_INFO T5
WHERE T1.ORDER_ITEM_CD = ''T20''
AND T1.STATUS = ''2002''
AND T2.PROD_INST_ID = T3.PROD_INST_ID
AND T2.STATE_CD != ''1101''
AND T1.ORDER_ITEM_OBJ_ID = T3.ORDER_RELATION_ID
AND T3.PRODUCT_ID = T4.PRODUCT_ID
AND T4.PRODUCT_ID = T5.PRODUCT_ID
AND T4.MANAGE_GRADE = ''03''
AND T5.SYSTEM_CODE IN (''103'', ''104'', ''105'')
AND T1.CUST_ORDER_ID = :1'
USING V_CUST_ORDER_ID;
END IF;
--处理订购关系
IF V_ORDER_ITEM_CD = 'T20' AND V_SERVICE_OFFER_ID = '15' THEN
--处理订购关系 失效
EXECUTE IMMEDIATE 'update order_relation r set r.state = ''1101'' ,r.modify_time = sysdate where r.order_relation_id = :1'
USING V_ORDER_ITEM_OBJ_ID;
END IF;
IF V_ORDER_ITEM_CD = 'T20' AND V_SERVICE_OFFER_ID = '10' THEN
--处理订购关系 正常
EXECUTE IMMEDIATE 'update order_relation r set r.state = ''1001'' ,r.modify_time = sysdate where r.order_relation_id = :1'
USING V_ORDER_ITEM_OBJ_ID;
END IF;
COMMIT;
END P_VSOP_COMLETION;
END PK_VSOP_COMLETION;
分享到:
相关推荐
Oracle 存储过程学习经典入门 Oracle 存储过程学习目录是 Oracle 存储过程学习的基础知识,了解 Oracle 存储过程的基本语法、基础知识和一些常见问题的解决方法是非常重要的。本文将从 Oracle 存储过程的基础知识...
4. 安全性提高:可以为存储过程设置权限,控制哪些用户可以执行特定的存储过程,从而增强数据库的安全性。 创建存储过程的基本语法结构如下: ```sql CREATE PROCEDURE procedure_name [;number] -- 可选的整数,...
这个"ORACLE存储过程学习源码"集合包含了从基础到高级的30个示例,是学习和掌握Oracle存储过程的理想资源。下面,我们将深入探讨存储过程的基本概念、结构、类型,以及如何通过这些源码进行学习。 1. **存储过程的...
在这个"MySQL存储过程学习"的主题中,我们将深入探讨存储过程的定义、创建、调用以及其在数据库管理中的实际应用。 首先,理解存储过程的基本概念是至关重要的。存储过程是一组为了完成特定功能的SQL语句集合,这些...
### 存储过程学习文档:深入理解SQL Server存储过程 #### 学习笔记概览 存储过程是SQL Server中一种预编译的SQL代码集合,它以特定的名称存储在数据库中,允许用户通过简单的调用来执行复杂的数据库操作。本文档...
在学习过程中,你可以通过实例练习来熟悉这些概念,例如创建一个简单的存储过程来计算两个数字的和,或者创建一个复杂的存储过程来处理多表之间的数据操作。同时,了解如何在实际项目中应用存储过程,将有助于你更好...
`insert_book`存储过程接受四个参数,其中`@param4`作为输出参数,用于返回总价。在执行存储过程后,可以使用`DECLARE`声明变量来接收输出参数的值,并通过`PRINT`或`SELECT`显示结果。 此外,存储过程可以有三种...
### Oracle存储过程学习经典 #### Oracle存储过程基础知识与实践 Oracle存储过程是SQL与PL/SQL结合的强大功能,用于封装复杂的数据操作逻辑于数据库内部,从而实现高效的事务处理和数据管理。以下是对Oracle存储...
学习SQL存储过程是提升数据库管理和应用开发效率的关键步骤,它可以帮助我们更好地组织和优化数据操作。 在SQL存储过程中,有以下几个重要的知识点: 1. **定义与创建**:存储过程可以通过`CREATE PROCEDURE`语句...
存储过程 结合 触发器流水 账号 实例 存储过程 结合 触发器流水 账号 实例
### ORACLE存储过程学习知识点详解 #### 一、存储过程概述 存储过程是数据库中预编译好的一组SQL语句,它可以实现复杂的数据处理逻辑,提高应用开发效率,并且能够增强应用程序的安全性。Oracle存储过程使用PL/SQL...
在本学习资料中,你将深入理解Oracle存储过程的创建、调用、调试以及优化等多个方面。 1. **存储过程的创建**: Oracle存储过程通过`CREATE PROCEDURE`语句来定义。你可以指定输入参数、输出参数、输入输出参数,...
4. **扩展存储过程**:扩展存储过程是为了增强SQL Server的功能而设计的,通常由C或C++编写,以“xp_”开头。它们提供了对操作系统和其他系统资源的访问,用于执行SQL Server自身不支持的操作。 在SQL Server中,...
### 存储过程学习1:Oracle中的存储过程基础与示例 #### 一、存储过程简介 存储过程是在数据库中预编译好的SQL语句集合,它可以接受输入参数并返回输出值。存储过程的主要优点包括提高性能(通过预编译减少网络...
### Oracle存储过程学习经典知识点详解 #### 一、Oracle存储过程概述 - **定义**: 存储过程是在数据库中预编译并存储的一段SQL或PL/SQL代码块,它可以包含复杂的逻辑处理,用于实现特定的功能。存储过程提高了代码...
通过这份"Oracle的存储过程学习资料",你可以系统地学习和掌握存储过程的各个方面,从而提升你在Oracle数据库管理和开发中的技能。无论是初学者还是经验丰富的DBA,这些资源都将为你的知识库增添宝贵的一笔。
### Oracle 存储过程与函数详解 #### 6.1 引言 Oracle数据库中的存储过程和函数是PL/SQL编程的重要组成部分。它们是数据库中存储的命名块,可以通过调用其名称来执行预定义的任务。这些命名块有助于实现业务逻辑、...
4. **流程控制**:在存储过程中,可以使用`IF-THEN-ELSE`、`CASE`语句、循环(`WHILE`和`FOR`)等结构来控制执行流程,实现条件判断和循环操作。 5. **异常处理**:DB2提供了`BEGIN TRY`和`END TRY`块来捕获和处理...
SQL存储过程是数据库管理系统中的一种重要工具...学习和掌握存储过程的创建、调用以及优化技巧对于任何数据库开发者都至关重要。通过实践和深入理解,您可以充分利用存储过程的优势,创建高效、安全的数据库应用程序。
在这个“Oracle存储过程学习实例文档”中,我们将深入探讨如何创建存储过程,以及如何在Java应用程序中调用这些过程。 1. **创建Oracle存储过程** 创建存储过程的基本语法如下: ```sql CREATE OR REPLACE ...