orcale存储过程(统计)

阅读: 评论:0

orcale存储过程(统计)

orcale存储过程(统计)

create or replace procedure singlecarrecord_pro
as
  --定义从t_dm_ddb201209查找的变量---
   type tdmddb is record(
       v_lineName  varchar2(20),  --线路名称
       v_carName  varchar2(20),   --车辆名称
       v_sjName  varchar2(20),    --司机姓名
       v_cwyName  varchar2(20),   --乘务员姓名
       v_dateTime  varchar2(20),  --日期
       v_carHyp  number(11),    --车次
       v_className varchar2(20),  --班次
       v_classType varchar2(20), --班别
       v_startStation  nvarchar2(20), --始发站
       v_endStation  nvarchar2(20),  --终到站
       v_planCarOutTime  varchar2(20), --计划发车时间
       v_planCarTime  varchar2(20), --计划到站时间
       v_factCarOutTime  varchar2(20), --实际发车时间
       v_factcarouttimec varchar2(50),--发车时间戳
       v_factCarTime  varchar2(20), --实际到站时间
       v_FACTCARINTIMEC varchar2(50),--到站时间戳
       v_scddsj  varchar2(20),--上次到达时间
       v_downline number(11),--离线类型
       v_jhfcsjc_dd number(11),--调度修改计划发车时间戳
       v_jhddsjc_dd number(11),--调度修改计划到达时间戳
       v_strideLineFlag number(20),--跨线标识
       v_strideLineId number(20),--跨线线路编号
       v_strideLineSrc number(11),--线路编号来源
       v_yxgl number(11),--运行公里
       v_yxfx number(11),--运行方向
       v_stopCarReason number(11), --车辆停开原因
       v_remark  varchar2(20),--备注
       o_record_state number(11),--运行状态
       o_starZd number(11),--开始站点
       o_endZd number(11)--结束站点
       );
       --定义从singlecarrecord表中查找的变量-----
      type tctsinglecarrecord is record(
            id varchar(20),
            v_lineName  varchar2(20), --线路名称
            v_carName  varchar2(20),--车辆名称
            v_dateTime  varchar2(20),--日期
            v_factCarOutTime  varchar2(20),--实际发车时间
            v_planCarTime  varchar2(20),--计划到站时间
            v_factCarTime  varchar2(20),--实际到站时间
            v_factcarouttimec varchar2(50),--发车时间戳
            v_FACTCARINTIMEC varchar2(50)--到站时间戳
       );
      --定义从singlecarrecord表中查找的变量-----
      type tctsinglecarrecordAvg is record(
            id varchar(20),
            v_factCarOutTime  varchar2(20),--实际发车时间
            o_linename  varchar(20),
            v_fx  number(11)
       );
     ---定义sql语句变量----
     v_dtbAll_sql varchar(1000);--查询动态表所有sql语句
     v_sql2_sql varchar(1000);--查询组合好了的趟次singlecarrecord表所有sql语句
     v_exe_sql1 varchar(1000);--查询非营运的途中机障
     v_exe_sql2 varchar(1000);--查询非营运的低保
     avg_sql varchar(1000);--查询发车间隔
     v_exe_sql3 varchar(1000);--每辆车的最开头一个车次 低保
     v_exe_sql4 varchar(1000);--每辆车的最后面一个车次 低保
     v_exe_sqladdoil varchar(1000);--添加燃料
     v_exe_sqlastoprun varchar(1000);--暂停营运
     v_exe_publicthing varchar(1000);--公务
     v_sqlpublic varchar(1000);--规则表中的公务
     v_exe_sql2erbao varchar(1000);--二保
     ------
     v_exe_erbao1 varchar(1000);--二保
     v_exe_erbao2 varchar(1000);--二保
     v_exe_oil1 varchar(1000);-
     v_exe_oil2 varchar(1000);--
     v_exe_stop1  varchar(1000);-
     v_exe_stop2  varchar(1000);-
     v_exe_public1  varchar(1000);-
     v_exe_public2  varchar(1000);-
     v_exe_public3  varchar(1000);-
     v_exe_public4  varchar(1000);-
     v_exe_publicthing1  varchar(1000);-
     v_isSplit  varchar(1000);

     erbao1 number(20);--
     erbao2 number(20);--
     oil1 number(20);--
     oil1gl  number(20);--
     ex_addoidgl1 number(20);
     ex_addoidgl2 number(20);
     oil2 number(20);--
     stop1 number(20);--
     stop2 number(20);--
     public1  number(20);
     public2  number(20);
     public3  number(20);
     public4  number(20);
     isSplit  number(20);

     v_erbao1 number(11);
     v_oil1 number(11);
     v_oilgl1  number(20);
     v_stop1 number(11);
     v_public1 number(11);
     o_stop number(11);
     v_ex_sumDibaos3   number(11);

     v_inoutcarname varchar2(20);
     v_inout_yxgl number(10);
     v_exe_inout varchar(200);--进出场公里查询
     --定义游标-----
     type cursor_type is ref cursor;--定义游标
     v_cursor2 cursor_type;--定义游标
     v_dtbAll_cursor cursor_type;--查询动态表的游标
     v_cursorAvgcurr cursor_type;----定义游标(发车间隔)
     cur cursor_type;-- 查询M383线路排班表
     cur1 cursor_type;--保存调度id
     v_inoutcursor cursor_type;--求进出场公里 游标
     --集合----
     tdmddb_last tdmddb;   --上次记录
     tdmddb_curr tdmddb;   --当前记录
     tsingle_last tctsinglecarrecord; --上次记录
     tsingle_curr tctsinglecarrecord; --当前记录
     tdmavg_last1 tctsinglecarrecordAvg;--上次记录(发车间隔)
     tdmavg_curr1 tctsinglecarrecordAvg;--当前记录(发车间隔)
     --常用变量----
     v_carHyp number(10) := 1;--趟次
     v_currDate varchar(20);--时间
     v_tabName varchar(50);--表名
     stopstationTimes number(11);--停站用时
     ex_sumDibaos number(11);--低保修车时间
     ex_sqlyibao number(20);--一保
     ex_sumDibaos3 number(11);--低保修车时间;
     ex_sumDibaos4 number(11);--低保修车时间;
     ex_sumJZs number(11);--机障时间
     ex_sumaddoiltime number(11);--加油时间
     ex_yxgl number(20);--加油时间
     ex_sumstopruntime number(11);--暂停营运时间
     ex_sumpublicthing number(20);--公务
     sumpublicthing1 number(20);--公务
     sqlpublic number(20);--规则表中的特殊公务
     ex_sql2erbao number(20);--二保
     ex_remark number(10);---定义一个标记
     v_remarkvalue varchar(50);--一二保,中文注释

     v_currentDate varchar2(20);--系统年月
     v_oneDateSql varchar2(500);--sql语句
     v_twoDateSql varchar2(500);--sql语句
     v_eOneDate varchar2(20);--当天
     v_eTwoDate varchar2(20);--第二天

     v_onestarttime varchar2(20);--当天开始时间
     v_oneendtime varchar2(20);--当天截至时间
     v_twostarttime varchar2(20);--第二天开始时间
     v_twoendtime varchar2(20);--第二天截至时间

     avgtime number(11);--求得发车间隔
     --定义查询排班表----
     v_sql1 varchar2(200);--查询排班表上行
     v_sqldown varchar2(200);--查询排班表下行
     v_sql2 varchar2(200);--查询调度表id
     v_sql3 varchar2(200);--修改调度表状态
     v_pbxlmc varchar2(20);--排班线路名称
     v_pbclmc varchar2(30);--排班车辆名称
     v_pbsj varchar2(30);--排版时间
     v_pbyxfx varchar2(20);--排班方向
     v_bc number(10);--排班班次
     v_yxsjbbs varchar2(30);--排班日期类型
     v_pbtable varchar(50);--排班表
     v_id varchar2(20);--调度表id
     O_comments_remark number(11);--标记
     ------------
     stoptimerange number(11);--停站用时范围
     v_sqlstoptimerange varchar(500);--停站用时范围sql
     v_day  varchar(11);--日

begin
     v_eOneDate := to_char(sysdate - interval '1' day,'yyyy-MM-dd');--要算的那天日期
     v_currDate := to_char(sysdate,'yyyyMM');--获得系统年月
     -----------
     v_day :=to_char(sysdate,'dd');
     if v_day=01 then--若是每一个月的第一天
        SELECT to_char(last_day(add_months(SYSDATE, -1)),'yyyy-MM-dd') into  v_eOneDate FROM dual;--求当前月的上一个月的最后一天的日期
        v_currDate := to_char(sysdate - interval '1' month,'yyyyMM');--获得当前月的上一个月日期
     end if;
    -----------
     --v_eOneDate :='2013-02-27';
     v_eTwoDate := to_char(sysdate,'yyyy-MM-dd');--存储过程被调用的日期
     v_tabName := 'T_DM_DDB' || v_currDate || '@linksz';
     --v_tabName:='T_DM_DDB201302@linksz';
     v_oneDateSql := 'select o_starttime,o_endtime from config where o_parameter = ''oneday''';
     v_twoDateSql := 'select o_starttime,o_endtime from config where o_parameter = ''twoday''';
     v_pbxlmc := 'M383';
     v_pbtable := 'ccccc';
      -----------------------------------线路 分班次来设置正点限时标识---------------------------------------
        v_sql1 := 'select O_clmc,O_fcsj,O_yxfx,O_bc,O_yxsjbbs from  '||v_pbtable||' where O_xlmc='''||v_pbxlmc||''' and o_pbrq='''||v_eOneDate||'''and o_bc<=8 and O_fcsj is not null order by O_fcsj ';--查询M383排班表小于9的所有的趟次
          begin
             open cur for v_sql1;
                  loop
                        fetch cur into v_pbclmc,v_pbsj,v_pbyxfx,v_bc,v_yxsjbbs;
                        EXIT WHEN cur%NOTFOUND;--游标找不到数据后退出循环
                        v_pbsj:=v_pbsj||':00';
                        if(v_pbyxfx=0 and (v_yxsjbbs='02'or v_yxsjbbs='03')) or v_pbyxfx=1 then
                             if v_bc<=4 then
                                  O_comments_remark:=1;--设置为90分钟标示
                                   v_sql2 := 'select O_id from '||v_tabName||' where  O_clmc='''||v_pbclmc||''' and O_jhfcsj='''||v_pbsj||''' and O_xlmc=''M383''and o_rq='''||v_eOneDate||'''';
                                      begin
                                          execute immediate v_sql2 into v_id;
                                          EXCEPTION
                                          WHEN NO_DATA_FOUND THEN
                                          dbms_output.put_line('找不到配置的时间!');
                                      end;
                                          v_sql3 := 'update '||v_tabName||' set O_comments='||O_comments_remark||' where O_id='''||v_id||'''';--给调度表中O_comments设置标示

                                          begin
                                            execute immediate v_sql3;
                                            EXCEPTION
                                            WHEN NO_DATA_FOUND THEN
                                            dbms_output.put_line('找不到配置的时间!');
                                          end;
                             elsif v_bc>=5 and v_bc<=8 then
                                  O_comments_remark:=2;--设置为100分钟标示
                                   v_sql2 := 'select O_id from '||v_tabName||' where  O_clmc='''||v_pbclmc||''' and O_jhfcsj='''||v_pbsj||''' and O_xlmc=''M383''and o_rq='''||v_eOneDate||'''';
                                      begin
                                          execute immediate v_sql2 into v_id;
                                          EXCEPTION
                                          WHEN NO_DATA_FOUND THEN
                                          dbms_output.put_line('找不到配置的时间!');
                                      end;
                                        v_sql3 := 'update '||v_tabName||' set O_comments='||O_comments_remark||' where O_id='''||v_id||'''';--给调度表中O_comments设置标示
                                          dbms_output.put_line(v_sql3);
                                          begin
                                            execute immediate v_sql3;
                                            EXCEPTION
                                            WHEN NO_DATA_FOUND THEN
                                            dbms_output.put_line('找不到配置的时间!');
                                          end;
                             end if;
                        elsif v_pbyxfx=0 and v_yxsjbbs='01'  then
                                if v_bc<=5 then

                                     O_comments_remark:=1;--设置为90分钟标示
                                      v_sql2 := 'select O_id from '||v_tabName||' where  O_clmc='''||v_pbclmc||''' and O_jhfcsj='''||v_pbsj||''' and O_xlmc=''M383''and o_rq='''||v_eOneDate||'''';
                                      begin
                                          execute immediate v_sql2 into v_id;
                                          EXCEPTION
                                          WHEN NO_DATA_FOUND THEN
                                          dbms_output.put_line('找不到配置的时间!');
                                      end;
                                       v_sql3 := 'update '||v_tabName||' set O_comments='||O_comments_remark||' where O_id='''||v_id||'''';--给调度表中O_comments设置标示
                                          dbms_output.put_line(v_sql3);
                                          begin
                                            execute immediate v_sql3;
                                            EXCEPTION
                                            WHEN NO_DATA_FOUND THEN
                                            dbms_output.put_line('找不到配置的时间!');
                                          end;
                                elsif v_bc=6 or v_bc=8 then

                                     O_comments_remark:=2;--设置为100分钟标示
                                      v_sql2 := 'select O_id from '||v_tabName||' where  O_clmc='''||v_pbclmc||''' and O_jhfcsj='''||v_pbsj||''' and O_xlmc=''M383''and o_rq='''||v_eOneDate||'''';
                                      begin
                                          execute immediate v_sql2 into v_id;
    

本文发布于:2024-01-28 02:23:35,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/17063798214102.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:存储过程   orcale
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23