CREATE PROCEDURE COPY_OCJ_LIST_TO_SHIPMENT
(
IN P_SESSION_ID VARCHAR(40), --当前用户的session ID
IN P_IS_REPEAT VARCHAR(20), --如果导入新数据传入值:YES,如果导入全部数据传入值:ALL
IN P_IS_SAME VARCHAR(20), --是否保存
IN P_ORDER_TYPE VARCHAR(20), --客户发货入库
IN P_ORDER_ID VARCHAR(20), --入库编号
IN P_ORDER_TIME VARCHAR(30), --入库时间
IN P_VENDOR_ID VARCHAR(20), --发货客户
IN P_WAREHOUSE_ID VARCHAR(20),--分拨中心
IN P_CREATE_BY VARCHAR(20) --创建者
)
MODIFIES SQL DATA --表示存储过程可以执行任何 SQL 语句
LANGUAGE SQL
------------------------------------------------------------------------
-- SQL 存储过程
------------------------------------------------------------------------
P1: BEGIN ATOMIC --把整段作为一个小的单元,要么都成功提交要么都失败回滚
--声明一个变量,用来保存入库计划明细中未失效运单的数量
DECLARE D_ODRER_COUNT INTEGER;
DECLARE D_ORDER_ID VARCHAR(20);
DECLARE D_IS_SAME VARCHAR(20);
-------------------------
-- 保存OCJ正式表数据 --
-------------------------
MERGE INTO OCJ_SHIPMENT OS
USING
(
--查询OCJ导入的临时表数据
SELECT
SHIPMENT_ID, --ID
SHIPMENT_PLAN_NO, --运单号
RECEIVE_DATE, --提货日期
VENDOR_ID, --发货客户
WAREHOUSE_ID, --原分拨中心
IS_CHECK, --是否审核
CAR_LICENSE_NO, --车辆牌号
DRIVER_NAME, --司机名称
STATE, --状态
CREATE_BY, --创建者
CREATE_DATE, --创建日期
LAST_UPDATE_BY, --修改者
LAST_UPDATE_DATE, --修改日期
SESSION_ID, --用户ID
SERIAL_ID, --序列号
IS_REPEAT, --是否重复
FROM_WAREHOUSE_ID, --来源分拨中心
IS_SAME_WAREHOUSE --是否同一分拨中心
FROM OCJ_SHIPMENT_TEMP
WHERE SESSION_ID = P_SESSION_ID AND IS_REPEAT <> P_IS_REPEAT
)OST
ON
(
OST.IS_REPEAT <> P_IS_REPEAT AND OS.SHIPMENT_PLAN_NO=OST.SHIPMENT_PLAN_NO AND OS.VENDOR_ID=OST.VENDOR_ID
) --如果临时表中标记为YS_Yes的,则修改
WHEN MATCHED THEN
--如果指定的条件匹配,则执行修改动作
UPDATE SET
OS.SHIPMENT_PLAN_NO=OST.SHIPMENT_PLAN_NO, --运单号
OS.RECEIVE_DATE=OST.RECEIVE_DATE, --提货日期
OS.VENDOR_ID=OST.VENDOR_ID, --发货客户
OS.WAREHOUSE_ID =OST.WAREHOUSE_ID, --原分拨中心
OS.FROM_WAREHOUSE_ID=OST.FROM_WAREHOUSE_ID, --来源分拨中心
OS.IS_CHECK=OST.IS_CHECK, --是否审核
OS.CAR_LICENSE_NO=OST.CAR_LICENSE_NO, --车辆编号
OS.DRIVER_NAME=OST.DRIVER_NAME, --司机名称
OS.STATE=OST.STATE, --状态
OS.LAST_UPDATE_BY=OST.LAST_UPDATE_BY, --修改者
OS.LAST_UPDATE_DATE=OST.LAST_UPDATE_DATE --修改日期
WHEN NOT MATCHED THEN
--如果指定的条件不匹配,则执行添加动作
INSERT
(
SHIPMENT_ID, --ID
SHIPMENT_PLAN_NO, --运单号
RECEIVE_DATE, --提货日期
VENDOR_ID, --发货客户
WAREHOUSE_ID, --原分拨中心
IS_CHECK, --是否审核
CAR_LICENSE_NO, --车辆牌号
DRIVER_NAME, --司机名称
STATE, --状态
CREATE_BY, --创建者
CREATE_DATE, --创建日期
LAST_UPDATE_BY, --修改者
LAST_UPDATE_DATE, --修改日期
FROM_WAREHOUSE_ID --来源分拨中心
)
VALUES
(
OST.SHIPMENT_ID,
OST.SHIPMENT_PLAN_NO,
OST.RECEIVE_DATE,
OST.VENDOR_ID,
OST.WAREHOUSE_ID,
OST.IS_CHECK,
OST.CAR_LICENSE_NO,
OST.DRIVER_NAME,
OST.STATE,
OST.CREATE_BY,
OST.CREATE_DATE,
OST.LAST_UPDATE_BY,
OST.LAST_UPDATE_DATE,
OST.FROM_WAREHOUSE_ID
);
------------------------------
-- 保存导入数据状态表状态 --
------------------------------
MERGE INTO SHIPMENT_STATE SS
USING
(
--查询OCJ导入的临时表数据
SELECT
SHIPMENT_ID, --ID
SHIPMENT_PLAN_NO, --运单号
RECEIVE_DATE, --提货日期
VENDOR_ID, --发货客户
WAREHOUSE_ID, --原分拨中心
--IS_CHECK, --是否审核
--CAR_LICENSE_NO, --车辆牌号
--DRIVER_NAME, --司机名称
--STATE, --状态
--CREATE_BY, --创建者
--CREATE_DATE, --创建日期
--LAST_UPDATE_BY, --修改者
--LAST_UPDATE_DATE, --修改日期
--SESSION_ID, --用户ID
--SERIAL_ID, --序列号
IS_REPEAT --是否重复
--FROM_WAREHOUSE_ID, --来源分拨中心
--IS_SAME_WAREHOUSE --是否同一分拨中心
FROM OCJ_SHIPMENT_TEMP
WHERE SESSION_ID = P_SESSION_ID AND IS_REPEAT <> P_IS_REPEAT
)OST
ON
(
OST.IS_REPEAT <> P_IS_REPEAT AND SS.SHIPMENT_PLAN_NO=OST.SHIPMENT_PLAN_NO AND SS.VENDOR_ID=OST.VENDOR_ID
) --如果临时表中标记为YS_Yes的,则修改
WHEN MATCHED THEN
--如果指定的条件匹配,则执行修改动作
UPDATE SET
SS.RECEIVE_DATE=OST.RECEIVE_DATE --提货日期
WHEN NOT MATCHED THEN
--如果指定的条件不匹配,则执行添加动作
INSERT
(
SHIPMENT_STATE_ID, --状态表ID(唯一的)
SHIPMENT_PLAN_NO, --运单号
RECEIVE_DATE, --提货日期
VENDOR_ID, --发货客户
WAREHOUSE_ID --原分拨中心
--CREATE_BY, --创建者
--CREATE_DATE --创建日期
)
VALUES
(
'SS' || OST.SHIPMENT_ID,
OST.SHIPMENT_PLAN_NO,
OST.RECEIVE_DATE,
OST.VENDOR_ID,
OST.WAREHOUSE_ID
--OST.CREATE_BY, --创建者
--OST.CREATE_DATE --创建日期
);
-----------------------------------
-- 保存导入数据Other状态表状态 --
-----------------------------------
MERGE INTO SHIPMENT_OTHER_STATE SOS
USING
(
--查询OCJ导入的临时表数据
SELECT
SHIPMENT_ID, --ID
SHIPMENT_PLAN_NO, --运单号
RECEIVE_DATE, --提货日期
VENDOR_ID, --发货客户
--WAREHOUSE_ID, --原分拨中心
--IS_CHECK, --是否审核
--CAR_LICENSE_NO, --车辆牌号
--DRIVER_NAME, --司机名称
--STATE, --状态
--CREATE_BY, --创建者
--CREATE_DATE, --创建日期
--LAST_UPDATE_BY, --修改者
--LAST_UPDATE_DATE, --修改日期
IS_REPEAT, --是否重复
WAREHOUSE_ID, --来源分拨中心
IS_SAME_WAREHOUSE --是否同一分拨中心
FROM OCJ_SHIPMENT_TEMP
WHERE SESSION_ID = P_SESSION_ID AND IS_REPEAT <> P_IS_REPEAT
)OST
ON
(
OST.IS_REPEAT <> P_IS_REPEAT AND SOS.SHIPMENT_PLAN_NO=OST.SHIPMENT_PLAN_NO AND SOS.VENDOR_ID=OST.VENDOR_ID
) --如果临时表中标记为YS_Yes的,则修改
WHEN MATCHED THEN
--如果指定的条件匹配,则执行修改动作
UPDATE SET
SOS.PLAN_WAREHOUSE_ID=OST.WAREHOUSE_ID, --来分拨中心
SOS.PLAN_IMPORT='YS_Yes', --可导入
SOS.OCJ_IMPORT='YS_Yes', --可导入
SOS.OCJ_CHECK='YS_Yes', --可审核
SOS.INCOME_ORDER='YS_Yes', --可入库
SOS.BOOK_LOC='YS_Yes' --可预排库位
--SOS.LAST_UPDATE_BY=OST.LAST_UPDATE_BY, --修改者
--SOS.LAST_UPDATE_DATE=OST.LAST_UPDATE_DATE --修改日期
WHEN NOT MATCHED THEN
--如果指定的条件不匹配,则执行添加动作
INSERT
(
SHIPMENT_STATE_ID, --状态表ID(唯一的)
SHIPMENT_PLAN_NO, --运单号
VENDOR_ID, --发货客户
PLAN_WAREHOUSE_ID, --来源分拨中心
PLAN_IMPORT, --可导入
OCJ_IMPORT, --可导入
OCJ_CHECK, --可审核
INCOME_ORDER, --可入库
BOOK_LOC --可预排库位
--CREATE_BY, --创建者
--CREATE_DATE --创建日期
)
VALUES
(
'SOS' || OST.SHIPMENT_ID,
OST.SHIPMENT_PLAN_NO,
OST.VENDOR_ID,
OST.WAREHOUSE_ID,
'YS_Yes',
'YS_Yes',
'YS_Yes',
'YS_Yes',
'YS_Yes'
--OST.CREATE_BY, --创建者
--OST.CREATE_DATE --创建日期
);
--------------------------
-- 保存计划入库头信息 --
--------------------------
SET D_IS_SAME = P_IS_SAME;
IF D_IS_SAME <> 'SAME' THEN
INSERT INTO WMS_INCOMING_ORDER_PLAN
(
ORDER_ID, --入库计划ID
ORDER_NO, --入库计划单号
ORDER_TIME, --入库时间
ORDER_TYPE, --类型
ENTER_TYPE, --自动
STATE, --状态
CREATE_BY, --创建者
CREATE_DATE, --创建时间
WAREHOUSE_ID, --分拨中心
VENDOR_ID --发货客户
)
VALUES
(
P_ORDER_ID,
'JHRKD' || P_ORDER_ID,
P_ORDER_TIME,
P_ORDER_TYPE,
'AUTO',
'State_All_Y',
P_CREATE_BY,
P_ORDER_TIME,
P_WAREHOUSE_ID,
P_VENDOR_ID
);
END IF;
----------------------------
-- 修改计划入库明细信息 --
----------------------------
MERGE INTO WMS_INCOMING_ORDER_ITEM_PLAN WIOI
USING
(
--查询OCJ导入的临时表数据
SELECT
SHIPMENT_ID, --ID
SHIPMENT_PLAN_NO, --运单号
RECEIVE_DATE, --提货日期
VENDOR_ID, --发货客户
WAREHOUSE_ID, --原分拨中心
--IS_CHECK, --是否审核
--CAR_LICENSE_NO, --车辆牌号
--DRIVER_NAME, --司机名称
--STATE, --状态
--CREATE_BY, --创建者
--CREATE_DATE, --创建日期
--LAST_UPDATE_BY, --修改者
--LAST_UPDATE_DATE, --修改日期
IS_REPEAT, --是否重复
FROM_WAREHOUSE_ID, --来源分拨中心
IS_SAME_WAREHOUSE --是否同一分拨中心
FROM OCJ_SHIPMENT_TEMP
WHERE SESSION_ID = P_SESSION_ID AND IS_REPEAT <> P_IS_REPEAT AND IS_SAME_WAREHOUSE='YS_No' --查询当前用户下不同分拨中心的运单信息
)OST
ON
(
1=1 AND OST.IS_SAME_WAREHOUSE = 'YS_No' AND WIOI.SHIPMENT_PLAN_NO=OST.SHIPMENT_PLAN_NO AND WIOI.VENDOR_ID=OST.VENDOR_ID --指定条件
)
WHEN MATCHED THEN
--如果指定的条件匹配,则执行修改动作
UPDATE SET
STATE = 'State_All_N';
----------------------------
-- 保存计划入库明细信息 --
----------------------------
MERGE INTO WMS_INCOMING_ORDER_ITEM_PLAN WIOI
USING
(
--查询OCJ导入的临时表数据
SELECT
SHIPMENT_ID, --ID
SHIPMENT_PLAN_NO, --运单号
RECEIVE_DATE, --提货日期
VENDOR_ID, --发货客户
WAREHOUSE_ID, --原分拨中心
--IS_CHECK, --是否审核
--CAR_LICENSE_NO, --车辆牌号
--DRIVER_NAME, --司机名称
--STATE, --状态
--CREATE_BY, --创建者
--CREATE_DATE, --创建日期
--LAST_UPDATE_BY, --修改者
--LAST_UPDATE_DATE, --修改日期
IS_REPEAT, --是否重复
FROM_WAREHOUSE_ID, --来源分拨中心
IS_SAME_WAREHOUSE --是否同一分拨中心
FROM OCJ_SHIPMENT_TEMP
WHERE SESSION_ID = P_SESSION_ID AND IS_REPEAT <> P_IS_REPEAT AND IS_SAME_WAREHOUSE IS NOT NULL
)OST
ON
(
1 <> 1 --指定条件
)
WHEN NOT MATCHED THEN
--如果指定的条件不匹配,则执行添加动作
INSERT
(
ORDER_ITEM_ID, --明细ID
ORDER_ID, --头信息ID
SHIPMENT_PLAN_ID, --配送计划ID
SHIPMENT_PLAN_NO, --运单号
CHECK_STATE, --
VENDOR_ID, --发货客户
WAREHOUSE_ID, --分拨中心
LOC_ID, --库位ID
QUANTITY, --数量
STATE, --状态
CREATE_BY, --创建者
CREATE_DATE --创建日期
)
VALUES
(
'WOIO' || SHIPMENT_ID,
P_ORDER_ID,
'-',
OST.SHIPMENT_PLAN_NO,
'YS_No',
OST.VENDOR_ID,
OST.WAREHOUSE_ID,
'-',
1,
'State_All_Y',
P_CREATE_BY,
P_ORDER_TIME
);
-----------------------
-- 修改计划入库信息 --
-----------------------
--如果在入库计划明细中当前ORDER_ID下,不存在状态为State_All_Y,则更新头部信息为State_All_N
--查询入库计划表表中有效运单的数据,根据ORDER_ID分组,如果该ORDER_ID下没有有效的入库计划明细,则头部信息失效
FOR V AS
SELECT sum(CASE STATE WHEN 'State_All_Y' THEN 1 ELSE 0 END) AS COUNT,order_id
FROM WMS_INCOMING_ORDER_ITEM_PLAN WIOIP
WHERE 1 = 1
GROUP BY WIOIP.order_id --根据ORDER_ID分组
FOR READ ONLY
DO
SET D_ORDER_ID = V.order_id;
SET D_ODRER_COUNT = V.COUNT;
--如果有效运单为0,更新头部信息为失效
IF D_ODRER_COUNT = 0 THEN
UPDATE WMS_INCOMING_ORDER_PLAN SET STATE = 'State_All_N' WHERE ORDER_ID = D_ORDER_ID;
END IF;
END FOR;
--------------------------------
-- 添加操作历史初始导入记录 --
--------------------------------
INSERT INTO ACTION_HISTORY (HISTORY_ID --操作历史ID
, REFRENCE_ID --引用ID
, REFRENCE_TYPE --操作类型
, REFRENCE_OPERATOR --
, WAREHOUSE_ID --分拨中心
, SUB_WAREHOUSE_ID --
, LOC_ID --库位
, BEGIN_TIME --开始时间
, STATE --状态
, COMMENTS --备注
, CREATE_BY --创建者
, CREATE_DATE --创建时间
, LAST_UPDATE_BY --最后修改者
, LAST_UPDATE_DATE --最后修改时间
, DRIVER_NAME --司机名称
, CAR_LICENSE_NO --车辆编号
, SHIPMENT_PLAN_ID --配送计划ID
, VENDOR_ID --发货客户
, SHIPMENT_PLAN_NO --运单号
)
SELECT
'AHO' || SHIPMENT_ID --操作历史ID
, SHIPMENT_ID --引用ID
, 'OPERATOR_SHIPMENT_OCJ_IMPORT' --操作类型
, 'NEW_OCJ_IMPORT' --
, FROM_WAREHOUSE_ID --分拨中心
, WAREHOUSE_ID --
, '-' --库位
, CREATE_DATE --开始时间
, 'State_All_Y' --状态
, '' --备注
, CREATE_BY --创建者
, CREATE_DATE --创建时间
, CREATE_BY --最后修改者
, CREATE_DATE --最后修改时间
, DRIVER_NAME --司机名称
, CAR_LICENSE_NO --车辆编号
, '-' --配送计划ID
, VENDOR_ID --发货客户
, SHIPMENT_PLAN_NO --运单号
FROM OCJ_SHIPMENT_TEMP
WHERE SESSION_ID = P_SESSION_ID AND IS_REPEAT = 'YS_No';
--初始导入
--------------------------------
-- 添加操作历史覆盖导入记录 --
--------------------------------
INSERT INTO ACTION_HISTORY
(
HISTORY_ID, --操作历史ID
REFRENCE_ID, --引用ID
REFRENCE_TYPE, --操作类型
REFRENCE_OPERATOR, --
WAREHOUSE_ID, --分拨中心
SUB_WAREHOUSE_ID, --
LOC_ID, --库位
BEGIN_TIME, --开始时间
STATE, --状态
COMMENTS, --备注
CREATE_BY, --创建者
CREATE_DATE, --创建时间
LAST_UPDATE_BY, --最后修改者
LAST_UPDATE_DATE, --最后修改时间
DRIVER_NAME, --司机名称
CAR_LICENSE_NO, --车辆编号
SHIPMENT_PLAN_ID, --配送计划ID
VENDOR_ID, --发货客户
SHIPMENT_PLAN_NO --运单号
)
SELECT
'AHO' || SHIPMENT_ID --操作历史ID
, SHIPMENT_ID --引用ID
, 'OPERATOR_SHIPMENT_OCJ_IMPORT' --操作类型
, 'AGAIN_OCJ_IMPORT' --
, FROM_WAREHOUSE_ID --分拨中心
, WAREHOUSE_ID --
, '-' --库位
, CREATE_DATE --开始时间
, 'State_All_Y' --状态
, '' --备注
, CREATE_BY --创建者
, CREATE_DATE --创建时间
, CREATE_BY --最后修改者
, CREATE_DATE --最后修改时间
, DRIVER_NAME --司机名称
, CAR_LICENSE_NO --车辆编号
, '-' --配送计划ID
, VENDOR_ID --发货客户
, SHIPMENT_PLAN_NO --运单号
FROM OCJ_SHIPMENT_TEMP
WHERE SESSION_ID = P_SESSION_ID AND IS_REPEAT = 'YS_Yes';
--覆盖导入
END P1;
db2 insert语句获取sequence当前值 db2 insert into select
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
DB2日常运维命令linux sql Database db2
-
根据Excel生成Insert或Update语句
根据Excel生成SQL
EXCEL SQL -
MySQL全文索引源码剖析之Insert语句执行过程
全文索引是信息检索领域的一种常用的技术手段,用于全文搜索问题。
全文索引 mysql MySQL Insert语句 -
db2 insert 不记录日志 db2 insert不写日志
写在前面 马上就是金九银十的跳槽黄金期了,很多读者都开始出去面试了。这不,又一名读者出去面试被面试官问了一个MySQL的问题:向MySQL中插入数据,如何实现MySQL中没有当前id标识的数据时插入数据,有当前id标识的数据时更新数据。其实,这题目一点也不难!! 先来个简单题目正式回答这个面试题时,我们先来看一个简单点的题目:如何实现向MySQL中插入数据时,存在则忽略,不
db2 insert 不记录日志 db2 如何导出insert语句 gridview ashx实现数据更新 insert into 插入空值 无法更新标识列 wechatid