create or replace package JG_DealerInStore is
-- Author : tuozhengwei
-- Created : 2010-9-26 21:29:39
-- Purpose : 经销商入库
type string_array is table of varchar2(100) index by binary_integer;
type int_array is table of number index by binary_integer;
--入库入口
procedure in_store
(
p_cid in varchar2, --企业编号
p_actor in varchar2, --操作员
p_actordate in date, --入库时间
p_leng in number, --数组长度
p_drugCodes in string_array, --JG码
p_orderIds in string_array, --入库单编号
p_toCorpIds in string_array, --下游企业编号
p_fmCorpIds in string_array, --上游企业编号
p_owCorpIds in string_array, --第三方物流企业编号
p_packLayers in int_array, --包装级别
p_orderTypes in int_array, --单据类型
p_subTypeNo out string_array, --子类编码
p_rets out int_array, --操作结果
p_odrType out int_array, --单号类型
p_layer out int_array, --包装级别
p_inno out string_array --出库单号
);
--入库
procedure start_instore
(
p_drugCode in varchar2,
p_orderType in number,
p_layer in number,
p_ret out number
);
end JG_DealerInStore;
-- Created : 2010-9-26 21:29:39
-- Purpose : 经销商入库
type string_array is table of varchar2(100) index by binary_integer;
type int_array is table of number index by binary_integer;
--入库入口
procedure in_store
(
p_cid in varchar2, --企业编号
p_actor in varchar2, --操作员
p_actordate in date, --入库时间
p_leng in number, --数组长度
p_drugCodes in string_array, --JG码
p_orderIds in string_array, --入库单编号
p_toCorpIds in string_array, --下游企业编号
p_fmCorpIds in string_array, --上游企业编号
p_owCorpIds in string_array, --第三方物流企业编号
p_packLayers in int_array, --包装级别
p_orderTypes in int_array, --单据类型
p_subTypeNo out string_array, --子类编码
p_rets out int_array, --操作结果
p_odrType out int_array, --单号类型
p_layer out int_array, --包装级别
p_inno out string_array --出库单号
);
--入库
procedure start_instore
(
p_drugCode in varchar2,
p_orderType in number,
p_layer in number,
p_ret out number
);
end JG_DealerInStore;
create or replace package body JG_DealerInStore is
v_cid varchar2(4); --企业编号
v_actor varchar2(20); --出库操作员
v_actorDate date; --出库时间
v_orderId varchar2(20); --出库单号
v_orderType number; --出库单类型
v_fmCorpId varchar2(20); --上游经销商编号
v_toCorpId varchar2(20); --下游经销商编号
v_owCorpId varchar2(20); --第三方物流企业编号
v_drugCode varchar2(25); --JG码
v_cid varchar2(4); --企业编号
v_actor varchar2(20); --出库操作员
v_actorDate date; --出库时间
v_orderId varchar2(20); --出库单号
v_orderType number; --出库单类型
v_fmCorpId varchar2(20); --上游经销商编号
v_toCorpId varchar2(20); --下游经销商编号
v_owCorpId varchar2(20); --第三方物流企业编号
v_drugCode varchar2(25); --JG码
v_subno varchar2(30); --临时子类编号
v_outno varchar2(30); --临时出库单号
v_ordtype number; --临时单据类型
v_layer number; --临时包装级别
v_ret number; --临时操作结果状态
v_amount number;
procedure in_store
(
p_cid in varchar2, --企业编号
p_actor in varchar2, --操作员
p_actordate in date, --入库时间
p_leng in number, --数组长度
p_drugCodes in string_array, --JG码
p_orderIds in string_array, --入库单编号
p_toCorpIds in string_array, --下游企业编号
p_fmCorpIds in string_array, --上游企业编号
p_owCorpIds in string_array, --第三方物流企业编号
p_packLayers in int_array, --包装级别
p_orderTypes in int_array, --单据类型
p_rets out int_array, --操作结果
p_subTypeNo out string_array, --子类编码
p_minAmount out int_array, --最小包装数
p_odrType out int_array, --单号类型
p_layer out int_array, --包装级别
p_inno out string_array --出库单号
)is
v_count number := 0;
begin
v_cid := p_cid;
if v_cid is null then
raise_application_error(-20000,'企业编号不能为空!');
end if;
v_count := p_drugCodes.count;
if v_count <> p_leng then
raise_application_error(-20011,'数组长度不正确!');
end if;
if v_count > 1000 then
raise_application_error(-20012,'数组长度超过1000!');
end if;
v_actor := p_actor;
v_actorDate := p_actordate;
for i in p_drugCodes.first..p_drugCodes.last
loop
begin
v_ret := 0;
v_subno := '';
v_amount :=0;
start_instore
(
p_drugCodes(i),
p_orderTypes(i),
p_packLayers(i),
v_ret
);
p_rets(i) := v_ret;
p_subTypeNo(i) := v_subno;
p_minAmount(i) := v_amount;
p_odrType(i) := p_orderTypes(i);
p_layer(i) := p_packLayers(i);
p_inno(i) := p_orderIds(i);
end;
end loop;
end in_store;
--入库
procedure start_instore
(
p_drugCode in varchar2,
p_orderType in number,
p_layer in number,
p_ret out number
)
is
qrySql varchar2(500) := 'select pid,outsideid,midsideid,insideid from Drug_JG'||v_cid|| ' where DrugCode =:1';
qrySql2 varchar2(500) := 'select DrugCode,ParentCode from Drug_Dataq'||v_cid|| 'where DrugCode =:1';
qrySql3 varchar2(500) :='select pstatus,splitflag from Data_Dealer_S'||v_cid|| ' where pid =:1 and outsideid =:2 and midsideid =:3 and insideid =:4';
updateSql varchar2(800) :='update Data_Dealer_S'||v_cid|| ' set inno';
updateSql2 varchar2(800) :='update Data_Dealer_S'||v_cid|| ' set pstatus';
updateSql3 varchar2(800) :='';
type t_cur is ref cursor;
v_cur t_cur;
begin
if p_layer = 1 then
p_ret := 3; --该码是盒码
else
open v_cur for qrySql using p_drugCode;
end if;
end start_instore;
end JG_DealerInStore;
v_outno varchar2(30); --临时出库单号
v_ordtype number; --临时单据类型
v_layer number; --临时包装级别
v_ret number; --临时操作结果状态
v_amount number;
procedure in_store
(
p_cid in varchar2, --企业编号
p_actor in varchar2, --操作员
p_actordate in date, --入库时间
p_leng in number, --数组长度
p_drugCodes in string_array, --JG码
p_orderIds in string_array, --入库单编号
p_toCorpIds in string_array, --下游企业编号
p_fmCorpIds in string_array, --上游企业编号
p_owCorpIds in string_array, --第三方物流企业编号
p_packLayers in int_array, --包装级别
p_orderTypes in int_array, --单据类型
p_rets out int_array, --操作结果
p_subTypeNo out string_array, --子类编码
p_minAmount out int_array, --最小包装数
p_odrType out int_array, --单号类型
p_layer out int_array, --包装级别
p_inno out string_array --出库单号
)is
v_count number := 0;
begin
v_cid := p_cid;
if v_cid is null then
raise_application_error(-20000,'企业编号不能为空!');
end if;
v_count := p_drugCodes.count;
if v_count <> p_leng then
raise_application_error(-20011,'数组长度不正确!');
end if;
if v_count > 1000 then
raise_application_error(-20012,'数组长度超过1000!');
end if;
v_actor := p_actor;
v_actorDate := p_actordate;
for i in p_drugCodes.first..p_drugCodes.last
loop
begin
v_ret := 0;
v_subno := '';
v_amount :=0;
start_instore
(
p_drugCodes(i),
p_orderTypes(i),
p_packLayers(i),
v_ret
);
p_rets(i) := v_ret;
p_subTypeNo(i) := v_subno;
p_minAmount(i) := v_amount;
p_odrType(i) := p_orderTypes(i);
p_layer(i) := p_packLayers(i);
p_inno(i) := p_orderIds(i);
end;
end loop;
end in_store;
--入库
procedure start_instore
(
p_drugCode in varchar2,
p_orderType in number,
p_layer in number,
p_ret out number
)
is
qrySql varchar2(500) := 'select pid,outsideid,midsideid,insideid from Drug_JG'||v_cid|| ' where DrugCode =:1';
qrySql2 varchar2(500) := 'select DrugCode,ParentCode from Drug_Dataq'||v_cid|| 'where DrugCode =:1';
qrySql3 varchar2(500) :='select pstatus,splitflag from Data_Dealer_S'||v_cid|| ' where pid =:1 and outsideid =:2 and midsideid =:3 and insideid =:4';
updateSql varchar2(800) :='update Data_Dealer_S'||v_cid|| ' set inno';
updateSql2 varchar2(800) :='update Data_Dealer_S'||v_cid|| ' set pstatus';
updateSql3 varchar2(800) :='';
type t_cur is ref cursor;
v_cur t_cur;
begin
if p_layer = 1 then
p_ret := 3; --该码是盒码
else
open v_cur for qrySql using p_drugCode;
end if;
end start_instore;
end JG_DealerInStore;