create or replace procedure test_static_cursor is
/*定義一個公共實體,根據實際給實體賦值,並將實體插入表*/
type streport is record(
REP_ID VARCHAR2(32), --Y 主鍵id
REP_OWNERID VARCHAR2(32), --Y 渠道id
REP_OWNERNAME VARCHAR2(32), --Y 渠道名稱
REP_PARKID VARCHAR2(32), --Y 景區id
REP_PARKNAME VARCHAR2(32), --Y 景區名稱
REP_ORDERNO VARCHAR2(32), --Y 訂單號
REP_ITEMID VARCHAR2(32), --Y 訂單明細
REP_THIRDORDERNO VARCHAR2(32), --Y 第三方訂單號
REP_PROID VARCHAR2(22), --Y 產品id
REP_PRONAME VARCHAR2(32), --Y 產品名稱
REP_CLID VARCHAR2(22), --Y 產品類型id
REP_CLNAME VARCHAR2(32), --Y 產品類型名稱
REP_PRICE NUMBER(8,2), --Y 單價
REP_NUMBER NUMBER(8), --Y 數量
REP_CHNUM NUMBER(8), --Y 核銷數量
REP_RFDNUM NUMBER(8), --Y 退票數量
REP_CHTLNUM NUMBER(8), --Y 已核銷總數量
REP_RFDTLNUM NUMBER(8), --Y 已退總數量
REP_NAME VARCHAR2(32), --Y 游客姓名
REP_PHONE VARCHAR2(32), --Y 游客手機號
REP_CARDNO VARCHAR2(25), --Y 游客身份證號
REP_CODE VARCHAR2(20), --Y 串碼
REP_SDATE DATE, --Y 有效開始日期
REP_EDATE DATE, --Y 有效結束日期
REP_PAYTIME DATE, --Y 支付日期
REP_PTYPE VARCHAR2(2), --Y 支付類型
REP_PNAME VARCHAR2(21), --Y 支付類型名稱
REP_REMARK VARCHAR2(300), --Y 訂單備注
REP_OPERATION VARCHAR2(2), --Y 業態
REP_ORDERTYPE NUMBER(1), --Y 訂單類型 0散客 1 團體
REP_ORDERBUS NUMBER(1), --Y 訂單來源( 0官網、 1微信、2OTA、3旅行社、4全民營銷)
REP_CDATE DATE, --Y 創建時間/核銷/退票
REP_FWDDATE DATE --Y 結轉時間
);
---根據自定義數據類型創建一個集合
TYPE c_user_array IS TABLE OF streport INDEX BY BINARY_INTEGER;
---集合對象
user_array c_user_array;
---數據對象
user streport;--存儲值的實體
smpno varchar2(20);--插入表主鍵ID
P_dorder t_biz_dorder%ROWTYPE;--訂單表
P_lxscomu co_gcpdatacomu%ROWTYPE;--旅行社
P_parkcomu co_gcpdatacomu%ROWTYPE;--景區
P_product co_product%ROWTYPE;--產品表
P_productclass co_product_class%ROWTYPE;--產品類別表
p_settlement co_settlement%ROWTYPE;--賬戶表
refundnum NUMBER(8);--退票總數量
smpnum NUMBER(10);--插入表主鍵ID
is_haverefnum NUMBER(8);--是否存在退票數量
begin
smpnum:=1;
for ditems in (select * from t_biz_ditems where orderitems_reportflag='0'
and orderitems_id in('F0157088301610182','F0156965501608948','F0156900901608300','F0156400001603257','F0155938201598578') order by orderitems_id asc) loop
select * into P_dorder from t_biz_dorder where t_biz_dorder.order_id=ditems.ORDER_ID;
select * into P_lxscomu from co_gcpdatacomu where syscpid =P_dorder.Order_Ownerid;
select * into P_parkcomu from co_gcpdatacomu where syscpid =ditems.orderitems_comid;
select * into P_product from co_product where pro_id =ditems.orderitems_productid;
if(P_product.Pro_Class is not null) then
select * into P_productclass from co_product_class where proclass_id =P_product.Pro_Class;
end if;
if(P_dorder.Order_Paytype is not null) then
select * into p_settlement from co_settlement where sttmid =P_dorder.Order_Paytype;
end if;
select sum(refund_num) into refundnum from order_refund where refund_status='2' and refund_code=ditems.orderitems_code;
/*散客訂單表賦值開始 */
--pro_sys_get_maxno('t_biz_streport',8,smpno);
user.rep_id:= smpnum;
user.rep_ownerid:=P_dorder.order_ownerid;
user.rep_ownername:=P_lxscomu.Syscpname;
user.rep_parkid:=ditems.orderitems_comid;
user.rep_parkname:=P_parkcomu.Syscpname;
user.rep_orderno:=ditems.order_no;
user.rep_itemid:=ditems.orderitems_id;
user.rep_thirdorderno:=ditems.dorderitems_thirdpartyno;
user.rep_proid:=ditems.orderitems_productid;
user.rep_proname:=ditems.orderitems_productname;
user.rep_clid:=P_product.pro_class;
user.rep_clname:='';
if(P_productclass.proclass_name is not null) then
user.rep_clname:=P_productclass.proclass_name;
end if;
user.rep_price:=ditems.orderitems_price;
user.rep_number:=ditems.orderitems_count;
user.rep_chnum:=0;
user.rep_rfdnum:=0;
user.rep_chtlnum:=ditems.orderitems_checktotal;
user.rep_code:=ditems.orderitems_code;
user.rep_rfdtlnum:=refundnum;
user.rep_name:=ditems.orderitems_name;
user.rep_phone:=ditems.orderitems_phone;
user.rep_cardno:=ditems.orderitems_icno;
user.rep_sdate:=ditems.orderitems_sdate;
user.rep_edate:=ditems.orderitems_edate;
user.rep_paytime:=P_dorder.order_paytime;
user.rep_ptype:=P_dorder.Order_Paytype;
user.rep_pname:='';
if(p_settlement.sttmname is not null) then
user.rep_pname:=p_settlement.sttmname;
end if;
user.rep_remark:=P_dorder.order_remark;
user.rep_operation:=P_product.pro_type;
user.rep_ordertype:=0;
user.rep_orderbus:=P_dorder.order_ditch;
user.rep_cdate:=P_dorder.order_createtime;
user.rep_fwddate:=sysdate;
/*散客訂單表賦值結束 */
/*\*按照下單時間插入數據開始*\
insert into t_biz_streport
(rep_id, rep_ownerid, rep_ownername, rep_parkid, rep_parkname, rep_orderno, rep_itemid, rep_thirdorderno, rep_proid, rep_proname, rep_clid, rep_clname, rep_price, rep_number, rep_chnum, rep_rfdnum, rep_chtlnum, rep_rfdtlnum, rep_name, rep_phone, rep_cardno, rep_code, rep_sdate, rep_edate, rep_paytime, rep_ptype, rep_pname, rep_remark, rep_operation, rep_ordertype, rep_orderbus, rep_cdate, rep_fwddate)
values
(user.rep_id, user.rep_ownerid, user.rep_ownername, user.rep_parkid, user.rep_parkname, user.rep_orderno, user.rep_itemid, user.rep_thirdorderno, user.rep_proid, user.rep_proname, user.rep_clid, user.rep_clname, user.rep_price, user.rep_number, user.rep_chnum, user.rep_rfdnum, user.rep_chtlnum, user.rep_rfdtlnum, user.rep_name, user.rep_phone, user.rep_cardno, user.rep_code, user.rep_sdate, user.rep_edate, user.rep_paytime, user.rep_ptype, user.rep_pname, user.rep_remark, user.rep_operation, user.rep_ordertype, user.rep_orderbus, user.rep_cdate, user.rep_fwddate);
if (SQL%ROWCOUNT < 1) then
update t_biz_ditems set orderitems_reportflag='1' where orderitems_id =ditems.orderitems_id;
end if;
\*按照下單時間插入數據結束*\*/
user_array(user.rep_id):=user;
smpnum:=smpnum+1;
/*定義一個公共實體,根據實際給實體賦值,並將實體插入表*/
type streport is record(
REP_ID VARCHAR2(32), --Y 主鍵id
REP_OWNERID VARCHAR2(32), --Y 渠道id
REP_OWNERNAME VARCHAR2(32), --Y 渠道名稱
REP_PARKID VARCHAR2(32), --Y 景區id
REP_PARKNAME VARCHAR2(32), --Y 景區名稱
REP_ORDERNO VARCHAR2(32), --Y 訂單號
REP_ITEMID VARCHAR2(32), --Y 訂單明細
REP_THIRDORDERNO VARCHAR2(32), --Y 第三方訂單號
REP_PROID VARCHAR2(22), --Y 產品id
REP_PRONAME VARCHAR2(32), --Y 產品名稱
REP_CLID VARCHAR2(22), --Y 產品類型id
REP_CLNAME VARCHAR2(32), --Y 產品類型名稱
REP_PRICE NUMBER(8,2), --Y 單價
REP_NUMBER NUMBER(8), --Y 數量
REP_CHNUM NUMBER(8), --Y 核銷數量
REP_RFDNUM NUMBER(8), --Y 退票數量
REP_CHTLNUM NUMBER(8), --Y 已核銷總數量
REP_RFDTLNUM NUMBER(8), --Y 已退總數量
REP_NAME VARCHAR2(32), --Y 游客姓名
REP_PHONE VARCHAR2(32), --Y 游客手機號
REP_CARDNO VARCHAR2(25), --Y 游客身份證號
REP_CODE VARCHAR2(20), --Y 串碼
REP_SDATE DATE, --Y 有效開始日期
REP_EDATE DATE, --Y 有效結束日期
REP_PAYTIME DATE, --Y 支付日期
REP_PTYPE VARCHAR2(2), --Y 支付類型
REP_PNAME VARCHAR2(21), --Y 支付類型名稱
REP_REMARK VARCHAR2(300), --Y 訂單備注
REP_OPERATION VARCHAR2(2), --Y 業態
REP_ORDERTYPE NUMBER(1), --Y 訂單類型 0散客 1 團體
REP_ORDERBUS NUMBER(1), --Y 訂單來源( 0官網、 1微信、2OTA、3旅行社、4全民營銷)
REP_CDATE DATE, --Y 創建時間/核銷/退票
REP_FWDDATE DATE --Y 結轉時間
);
---根據自定義數據類型創建一個集合
TYPE c_user_array IS TABLE OF streport INDEX BY BINARY_INTEGER;
---集合對象
user_array c_user_array;
---數據對象
user streport;--存儲值的實體
smpno varchar2(20);--插入表主鍵ID
P_dorder t_biz_dorder%ROWTYPE;--訂單表
P_lxscomu co_gcpdatacomu%ROWTYPE;--旅行社
P_parkcomu co_gcpdatacomu%ROWTYPE;--景區
P_product co_product%ROWTYPE;--產品表
P_productclass co_product_class%ROWTYPE;--產品類別表
p_settlement co_settlement%ROWTYPE;--賬戶表
refundnum NUMBER(8);--退票總數量
smpnum NUMBER(10);--插入表主鍵ID
is_haverefnum NUMBER(8);--是否存在退票數量
begin
smpnum:=1;
for ditems in (select * from t_biz_ditems where orderitems_reportflag='0'
and orderitems_id in('F0157088301610182','F0156965501608948','F0156900901608300','F0156400001603257','F0155938201598578') order by orderitems_id asc) loop
select * into P_dorder from t_biz_dorder where t_biz_dorder.order_id=ditems.ORDER_ID;
select * into P_lxscomu from co_gcpdatacomu where syscpid =P_dorder.Order_Ownerid;
select * into P_parkcomu from co_gcpdatacomu where syscpid =ditems.orderitems_comid;
select * into P_product from co_product where pro_id =ditems.orderitems_productid;
if(P_product.Pro_Class is not null) then
select * into P_productclass from co_product_class where proclass_id =P_product.Pro_Class;
end if;
if(P_dorder.Order_Paytype is not null) then
select * into p_settlement from co_settlement where sttmid =P_dorder.Order_Paytype;
end if;
select sum(refund_num) into refundnum from order_refund where refund_status='2' and refund_code=ditems.orderitems_code;
/*散客訂單表賦值開始 */
--pro_sys_get_maxno('t_biz_streport',8,smpno);
user.rep_id:= smpnum;
user.rep_ownerid:=P_dorder.order_ownerid;
user.rep_ownername:=P_lxscomu.Syscpname;
user.rep_parkid:=ditems.orderitems_comid;
user.rep_parkname:=P_parkcomu.Syscpname;
user.rep_orderno:=ditems.order_no;
user.rep_itemid:=ditems.orderitems_id;
user.rep_thirdorderno:=ditems.dorderitems_thirdpartyno;
user.rep_proid:=ditems.orderitems_productid;
user.rep_proname:=ditems.orderitems_productname;
user.rep_clid:=P_product.pro_class;
user.rep_clname:='';
if(P_productclass.proclass_name is not null) then
user.rep_clname:=P_productclass.proclass_name;
end if;
user.rep_price:=ditems.orderitems_price;
user.rep_number:=ditems.orderitems_count;
user.rep_chnum:=0;
user.rep_rfdnum:=0;
user.rep_chtlnum:=ditems.orderitems_checktotal;
user.rep_code:=ditems.orderitems_code;
user.rep_rfdtlnum:=refundnum;
user.rep_name:=ditems.orderitems_name;
user.rep_phone:=ditems.orderitems_phone;
user.rep_cardno:=ditems.orderitems_icno;
user.rep_sdate:=ditems.orderitems_sdate;
user.rep_edate:=ditems.orderitems_edate;
user.rep_paytime:=P_dorder.order_paytime;
user.rep_ptype:=P_dorder.Order_Paytype;
user.rep_pname:='';
if(p_settlement.sttmname is not null) then
user.rep_pname:=p_settlement.sttmname;
end if;
user.rep_remark:=P_dorder.order_remark;
user.rep_operation:=P_product.pro_type;
user.rep_ordertype:=0;
user.rep_orderbus:=P_dorder.order_ditch;
user.rep_cdate:=P_dorder.order_createtime;
user.rep_fwddate:=sysdate;
/*散客訂單表賦值結束 */
/*\*按照下單時間插入數據開始*\
insert into t_biz_streport
(rep_id, rep_ownerid, rep_ownername, rep_parkid, rep_parkname, rep_orderno, rep_itemid, rep_thirdorderno, rep_proid, rep_proname, rep_clid, rep_clname, rep_price, rep_number, rep_chnum, rep_rfdnum, rep_chtlnum, rep_rfdtlnum, rep_name, rep_phone, rep_cardno, rep_code, rep_sdate, rep_edate, rep_paytime, rep_ptype, rep_pname, rep_remark, rep_operation, rep_ordertype, rep_orderbus, rep_cdate, rep_fwddate)
values
(user.rep_id, user.rep_ownerid, user.rep_ownername, user.rep_parkid, user.rep_parkname, user.rep_orderno, user.rep_itemid, user.rep_thirdorderno, user.rep_proid, user.rep_proname, user.rep_clid, user.rep_clname, user.rep_price, user.rep_number, user.rep_chnum, user.rep_rfdnum, user.rep_chtlnum, user.rep_rfdtlnum, user.rep_name, user.rep_phone, user.rep_cardno, user.rep_code, user.rep_sdate, user.rep_edate, user.rep_paytime, user.rep_ptype, user.rep_pname, user.rep_remark, user.rep_operation, user.rep_ordertype, user.rep_orderbus, user.rep_cdate, user.rep_fwddate);
if (SQL%ROWCOUNT < 1) then
update t_biz_ditems set orderitems_reportflag='1' where orderitems_id =ditems.orderitems_id;
end if;
\*按照下單時間插入數據結束*\*/
user_array(user.rep_id):=user;
smpnum:=smpnum+1;
for ticketnum in (select * from twb_ticketnum where twb_ticketnum.tnum_code =ditems.orderitems_code) loop
/*散客核銷賦值開始 */
--pro_sys_get_maxno('t_biz_streport',8,smpno);
user.rep_id:= smpnum;
user.rep_number:=0;
user.rep_chnum:=ticketnum.tnum_num;
user.rep_rfdnum:=0;
user.rep_cdate:=ticketnum.tnum_date;
user.rep_fwddate:=sysdate;
/*散客核銷賦值結束 */
/* \*按照核銷時間插入數據開始*\
insert into t_biz_streport
(rep_id, rep_ownerid, rep_ownername, rep_parkid, rep_parkname, rep_orderno, rep_itemid, rep_thirdorderno, rep_proid, rep_proname, rep_clid, rep_clname, rep_price, rep_number, rep_chnum, rep_rfdnum, rep_chtlnum, rep_rfdtlnum, rep_name, rep_phone, rep_cardno, rep_code, rep_sdate, rep_edate, rep_paytime, rep_ptype, rep_pname, rep_remark, rep_operation, rep_ordertype, rep_orderbus, rep_cdate, rep_fwddate)
values
(user.rep_id, user.rep_ownerid, user.rep_ownername, user.rep_parkid, user.rep_parkname, user.rep_orderno, user.rep_itemid, user.rep_thirdorderno, user.rep_proid, user.rep_proname, user.rep_clid, user.rep_clname, user.rep_price, user.rep_number, user.rep_chnum, user.rep_rfdnum, user.rep_chtlnum, user.rep_rfdtlnum, user.rep_name, user.rep_phone, user.rep_cardno, user.rep_code, user.rep_sdate, user.rep_edate, user.rep_paytime, user.rep_ptype, user.rep_pname, user.rep_remark, user.rep_operation, user.rep_ordertype, user.rep_orderbus, user.rep_cdate, user.rep_fwddate);
\*按照核銷時間插入數據結束*\*/
user_array(user.rep_id):=user;
smpnum:=smpnum+1;
end loop;
select count(1) into is_haverefnum from order_refund where order_refund.refund_code =ditems.orderitems_code and order_refund.refund_status='2';
if(is_haverefnum>0) then
for refund in (select * from order_refund where order_refund.refund_code =ditems.orderitems_code and order_refund.refund_status='2') loop
/*散客退票賦值開始 */
--pro_sys_get_maxno('t_biz_streport',8,smpno);
user.rep_id:= smpnum;
user.rep_number:=0;
user.rep_chnum:=0;
user.rep_rfdnum:=refund.refund_num;
user.rep_cdate:=refund.refund_etime;
user.rep_fwddate:=sysdate;
/*散客退票賦值結束 */
/* \*按照退票時間插入數據開始*\
insert into t_biz_streport
(rep_id, rep_ownerid, rep_ownername, rep_parkid, rep_parkname, rep_orderno, rep_itemid, rep_thirdorderno, rep_proid, rep_proname, rep_clid, rep_clname, rep_price, rep_number, rep_chnum, rep_rfdnum, rep_chtlnum, rep_rfdtlnum, rep_name, rep_phone, rep_cardno, rep_code, rep_sdate, rep_edate, rep_paytime, rep_ptype, rep_pname, rep_remark, rep_operation, rep_ordertype, rep_orderbus, rep_cdate, rep_fwddate)
values
(user.rep_id, user.rep_ownerid, user.rep_ownername, user.rep_parkid, user.rep_parkname, user.rep_orderno, user.rep_itemid, user.rep_thirdorderno, user.rep_proid, user.rep_proname, user.rep_clid, user.rep_clname, user.rep_price, user.rep_number, user.rep_chnum, user.rep_rfdnum, user.rep_chtlnum, user.rep_rfdtlnum, user.rep_name, user.rep_phone, user.rep_cardno, user.rep_code, user.rep_sdate, user.rep_edate, user.rep_paytime, user.rep_ptype, user.rep_pname, user.rep_remark, user.rep_operation, user.rep_ordertype, user.rep_orderbus, user.rep_cdate, user.rep_fwddate);
\*按照退票時間插入數據結束*\*/
user_array(user.rep_id):=user;
smpnum:=smpnum+1;
end loop;
--else
/*看結轉表是否存在退票數據,如果存在修改當前所有明細記錄保持一致*/
end if;
begin
for v_counter in 1 .. user_array.count loop
pro_sys_get_maxno('t_biz_streport',8,smpno);
insert into t_biz_streport
(rep_id, rep_ownerid, rep_ownername, rep_parkid, rep_parkname, rep_orderno, rep_itemid, rep_thirdorderno, rep_proid, rep_proname, rep_clid, rep_clname, rep_price, rep_number, rep_chnum, rep_rfdnum, rep_chtlnum, rep_rfdtlnum, rep_name, rep_phone, rep_cardno, rep_code, rep_sdate, rep_edate, rep_paytime, rep_ptype, rep_pname, rep_remark, rep_operation, rep_ordertype, rep_orderbus, rep_cdate, rep_fwddate)
values
(smpno, user_array(v_counter).rep_ownerid, user_array(v_counter).rep_ownername, user_array(v_counter).rep_parkid, user_array(v_counter).rep_parkname, user_array(v_counter).rep_orderno, user_array(v_counter).rep_itemid, user_array(v_counter).rep_thirdorderno, user_array(v_counter).rep_proid, user_array(v_counter).rep_proname, user_array(v_counter).rep_clid, user_array(v_counter).rep_clname, user_array(v_counter).rep_price, user_array(v_counter).rep_number, user_array(v_counter).rep_chnum, user_array(v_counter).rep_rfdnum, user_array(v_counter).rep_chtlnum, user_array(v_counter).rep_rfdtlnum, user_array(v_counter).rep_name, user_array(v_counter).rep_phone, user_array(v_counter).rep_cardno, user_array(v_counter).rep_code, user_array(v_counter).rep_sdate, user_array(v_counter).rep_edate, user_array(v_counter).rep_paytime, user_array(v_counter).rep_ptype, user_array(v_counter).rep_pname, user_array(v_counter).rep_remark, user_array(v_counter).rep_operation, user_array(v_counter).rep_ordertype, user_array(v_counter).rep_orderbus, user_array(v_counter).rep_cdate, user_array(v_counter).rep_fwddate);
if (SQL%ROWCOUNT > 0) then
update t_biz_ditems set orderitems_reportflag='1' where orderitems_id =ditems.orderitems_id;
end if;
end loop;
end;
end loop;
end;
