• oracle实体或集合赋值,循环


    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;
       
        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;
  • 相关阅读:
    TStringList 常用操作(转自南山古陶)
    在Delphi中使用Indy控件实现邮件群发
    GSM手机SMS编码解码
    建别人进不了删不掉的文件夹
    播放 wav 文件
    delphi inherited,纯虚
    PDU编码规则
    sql函数
    基于GPRS的LED电子显示屏
    结对编程 队友代码分析
  • 原文地址:https://www.cnblogs.com/zuochencun/p/11309395.html
Copyright © 2020-2023  润新知