0 0

一个小时过去了200条记录 都还没写进去 效率低的可怕,求解0

create or replace procedure SP_MSS_AGING is
  amount Number(18, 2);-- 未逾期
  overdue1 Number(18, 2); --逾期0-6个月
  overdue2 Number(18, 2); --逾期6-12月
  overdue3 Number(18, 2); --逾期12-18个月
  overdue4 Number(18, 2); --逾期18-24月
  overdue5 Number(18, 2); --逾期以上两年
begin
  declare
    CURSOR companyRow IS
      select bf01.scc_company_id,
             bf01.SETTLE_TYPE_NO
        from TB_MSS_SETT_CONTRACT   bf01,
             TB_MSS_SC_ACC_RECV_DET bf06,
             TB_MSS_SETT_INVOICE    bf02,
             TB_SCC_WF_PROC_MAIN    ac03,
             TB_MSS_SC_ACC_RECV     bt01
       where ac03.target_table_name = 'TB_MSS_SETT_INVOICE'
         and ac03.target_table_id = bf02.mss_sett_invoice_id
         and bf02.mss_sett_contract_id = bf01.mss_sett_contract_id
         and bf01.mss_sett_contract_id = bf06.mss_sett_contract_id
         and bf06.MSS_SC_ACC_RECV_ID = bt01.mss_sc_acc_recv_id
         and bf01.NOTE_STATE = 2
         and ac03.STATUS = '4'
         and not (bt01.AR_STATUS = '2')
         and to_char(trunc(ACC_RECV_DATE), 'yyyy-mm') =
             to_char(add_months(trunc(sysdate), -1), 'yyyy-mm')
       group by bf01.scc_company_id, bf01.SETTLE_TYPE_NO;
    aging companyRow%rowtype;
  
  begin
    for aging in companyRow loop
     begin
        select sum(bt01.AR_AMOUNT)
          into amount
          from TB_MSS_SETT_CONTRACT   bf01,
               TB_MSS_SC_ACC_RECV_DET bf06,
               TB_MSS_SETT_INVOICE    bf02,
               TB_SCC_WF_PROC_MAIN    ac03,
               TB_MSS_SC_ACC_RECV     bt01
         where ac03.target_table_name = 'TB_MSS_SETT_INVOICE'
           and ac03.target_table_id = bf02.mss_sett_invoice_id
           and bf02.mss_sett_contract_id = bf01.mss_sett_contract_id
           and bf01.mss_sett_contract_id = bf06.mss_sett_contract_id
           and bf06.MSS_SC_ACC_RECV_ID = bt01.mss_sc_acc_recv_id
           and bt01.OVERDUED = '0'
           and bf01.NOTE_STATE = 2
           and ac03.STATUS = '4'
           and not (bt01.AR_STATUS = '2')
           and bf01.scc_company_id = aging.scc_company_id
           and bf01.SETTLE_TYPE_NO = aging.SETTLE_TYPE_NO
           and to_char(trunc(ACC_RECV_DATE), 'yyyy-mm') =
               to_char(add_months(trunc(sysdate), -1), 'yyyy-mm')
         group by bf01.scc_company_id, bf01.SETTLE_TYPE_NO;
      EXCEPTION
        WHEN NO_DATA_FOUND THEN
          amount := 0;
      end;  
    
    
    
      begin
        select sum(bt01.AR_AMOUNT)
          into overdue1
          from TB_MSS_SETT_CONTRACT   bf01,
               TB_MSS_SC_ACC_RECV_DET bf06,
               TB_MSS_SETT_INVOICE    bf02,
               TB_SCC_WF_PROC_MAIN    ac03,
               TB_MSS_SC_ACC_RECV     bt01
         where ac03.target_table_name = 'TB_MSS_SETT_INVOICE'
           and ac03.target_table_id = bf02.mss_sett_invoice_id
           and bf02.mss_sett_contract_id = bf01.mss_sett_contract_id
           and bf01.mss_sett_contract_id = bf06.mss_sett_contract_id
           and bf06.MSS_SC_ACC_RECV_ID = bt01.mss_sc_acc_recv_id
           and bt01.OVERDUED = '1'
           and bf01.NOTE_STATE = 2
           and ac03.STATUS = '4'
           and not (bt01.AR_STATUS = '2')
           and bf01.scc_company_id = aging.scc_company_id
           and bf01.SETTLE_TYPE_NO = aging.SETTLE_TYPE_NO
           and to_char(trunc(ACC_RECV_DATE), 'yyyy-mm') =
               to_char(add_months(trunc(sysdate), -1), 'yyyy-mm')
           and months_between(sysdate, ACC_RECV_DATE) <= 6
           and months_between(sysdate, ACC_RECV_DATE) >= 0
         group by bf01.scc_company_id, bf01.SETTLE_TYPE_NO;
      EXCEPTION
        WHEN NO_DATA_FOUND THEN
          overdue1 := 0;
      end;
      
        begin
        select sum(bt01.AR_AMOUNT)
          into overdue2
          from TB_MSS_SETT_CONTRACT   bf01,
               TB_MSS_SC_ACC_RECV_DET bf06,
               TB_MSS_SETT_INVOICE    bf02,
               TB_SCC_WF_PROC_MAIN    ac03,
               TB_MSS_SC_ACC_RECV     bt01
         where ac03.target_table_name = 'TB_MSS_SETT_INVOICE'
           and ac03.target_table_id = bf02.mss_sett_invoice_id
           and bf02.mss_sett_contract_id = bf01.mss_sett_contract_id
           and bf01.mss_sett_contract_id = bf06.mss_sett_contract_id
           and bf06.MSS_SC_ACC_RECV_ID = bt01.mss_sc_acc_recv_id
           and bt01.OVERDUED = '1'
           and bf01.NOTE_STATE = 2
           and ac03.STATUS = '4'
           and not (bt01.AR_STATUS = '2')
           and bf01.scc_company_id = aging.scc_company_id
           and bf01.SETTLE_TYPE_NO = aging.SETTLE_TYPE_NO
           and to_char(trunc(ACC_RECV_DATE), 'yyyy-mm') =
               to_char(add_months(trunc(sysdate), -1), 'yyyy-mm')
           and months_between(sysdate, ACC_RECV_DATE) <= 12
           and months_between(sysdate, ACC_RECV_DATE) >= 6
         group by bf01.scc_company_id, bf01.SETTLE_TYPE_NO;
      EXCEPTION
        WHEN NO_DATA_FOUND THEN
          overdue2 := 0;
      end;
      
       begin
        select sum(bt01.AR_AMOUNT)
          into overdue3
          from TB_MSS_SETT_CONTRACT   bf01,
               TB_MSS_SC_ACC_RECV_DET bf06,
               TB_MSS_SETT_INVOICE    bf02,
               TB_SCC_WF_PROC_MAIN    ac03,
               TB_MSS_SC_ACC_RECV     bt01
         where ac03.target_table_name = 'TB_MSS_SETT_INVOICE'
           and ac03.target_table_id = bf02.mss_sett_invoice_id
           and bf02.mss_sett_contract_id = bf01.mss_sett_contract_id
           and bf01.mss_sett_contract_id = bf06.mss_sett_contract_id
           and bf06.MSS_SC_ACC_RECV_ID = bt01.mss_sc_acc_recv_id
           and bt01.OVERDUED = '1'
           and bf01.NOTE_STATE = 2
           and ac03.STATUS = '4'
           and not (bt01.AR_STATUS = '2')
           and bf01.scc_company_id = aging.scc_company_id
           and bf01.SETTLE_TYPE_NO = aging.SETTLE_TYPE_NO
           and to_char(trunc(ACC_RECV_DATE), 'yyyy-mm') =
               to_char(add_months(trunc(sysdate), -1), 'yyyy-mm')
           and months_between(sysdate, ACC_RECV_DATE) <= 18
           and months_between(sysdate, ACC_RECV_DATE) >= 12
         group by bf01.scc_company_id, bf01.SETTLE_TYPE_NO;
      EXCEPTION
        WHEN NO_DATA_FOUND THEN
          overdue3 := 0;
      end;
      
      begin
        select sum(bt01.AR_AMOUNT)
          into overdue4
          from TB_MSS_SETT_CONTRACT   bf01,
               TB_MSS_SC_ACC_RECV_DET bf06,
               TB_MSS_SETT_INVOICE    bf02,
               TB_SCC_WF_PROC_MAIN    ac03,
               TB_MSS_SC_ACC_RECV     bt01
         where ac03.target_table_name = 'TB_MSS_SETT_INVOICE'
           and ac03.target_table_id = bf02.mss_sett_invoice_id
           and bf02.mss_sett_contract_id = bf01.mss_sett_contract_id
           and bf01.mss_sett_contract_id = bf06.mss_sett_contract_id
           and bf06.MSS_SC_ACC_RECV_ID = bt01.mss_sc_acc_recv_id
           and bt01.OVERDUED = '1'
           and bf01.NOTE_STATE = 2
           and ac03.STATUS = '4'
           and not (bt01.AR_STATUS = '2')
           and bf01.scc_company_id = aging.scc_company_id
           and bf01.SETTLE_TYPE_NO = aging.SETTLE_TYPE_NO
           and to_char(trunc(ACC_RECV_DATE), 'yyyy-mm') =
               to_char(add_months(trunc(sysdate), -1), 'yyyy-mm')
           and months_between(sysdate, ACC_RECV_DATE) <= 24
           and months_between(sysdate, ACC_RECV_DATE) >= 18
         group by bf01.scc_company_id, bf01.SETTLE_TYPE_NO;
      EXCEPTION
        WHEN NO_DATA_FOUND THEN
          overdue4 := 0;
      end;
      
      begin
        select sum(bt01.AR_AMOUNT)
          into overdue5
          from TB_MSS_SETT_CONTRACT   bf01,
               TB_MSS_SC_ACC_RECV_DET bf06,
               TB_MSS_SETT_INVOICE    bf02,
               TB_SCC_WF_PROC_MAIN    ac03,
               TB_MSS_SC_ACC_RECV     bt01
         where ac03.target_table_name = 'TB_MSS_SETT_INVOICE'
           and ac03.target_table_id = bf02.mss_sett_invoice_id
           and bf02.mss_sett_contract_id = bf01.mss_sett_contract_id
           and bf01.mss_sett_contract_id = bf06.mss_sett_contract_id
           and bf06.MSS_SC_ACC_RECV_ID = bt01.mss_sc_acc_recv_id
           and bt01.OVERDUED = '1'
           and bf01.NOTE_STATE = 2
           and ac03.STATUS = '4'
           and not (bt01.AR_STATUS = '2')
           and bf01.scc_company_id = aging.scc_company_id
           and bf01.SETTLE_TYPE_NO = aging.SETTLE_TYPE_NO
           and to_char(trunc(ACC_RECV_DATE), 'yyyy-mm') =
               to_char(add_months(trunc(sysdate), -1), 'yyyy-mm')
           and months_between(sysdate, ACC_RECV_DATE) >= 24
         group by bf01.scc_company_id, bf01.SETTLE_TYPE_NO;
      EXCEPTION
        WHEN NO_DATA_FOUND THEN
          overdue5 := 0;
      end;
          insert into TB_MSS_AGENCY_OD_AGING
            (MSS_AGENCY_OD_AGING_ID,
             SCC_COMPANY_ID,
             YEAR_MONTH,
             SETTLE_TYPE_NO,
             UN_DUE_AMOUNT,
             OD_6_MONTHS,
             OD_12_MONTHS,
             OD_18_MONTHS,
             OD_24_MONTHS,
             OD_2_YEARS,
             OD_SUMMARY)
          values
            (sq_mss_agency_od_aging.NEXTVAL,
             aging.scc_company_id,
             to_char(add_months(trunc(sysdate), -1), 'yyyy-mm'),
             aging.SETTLE_TYPE_NO,
             amount,
             overdue1,
             overdue2,
             overdue3,
             overdue4,
             overdue5,
             overdue1 + overdue2 + overdue3 + overdue4 + overdue5);
        end loop;
      end;
    end SP_MSS_AGING;

2014年10月30日 18:25
目前还没有答案

相关推荐

    DEA算法学习系列之三:一次性求解CCR模型所有DMU参数-效率、规模效益、有效性特征、调整值的matlab代码.pdf

    在传统的Excel环境中,每次只能单独计算一个DMU的效率,而MATLAB编程则可以批量处理所有DMU的数据,极大地提高了计算效率。MATLAB中的线性规划求解器是实现这一目标的关键工具。 MATLAB通过内置的优化工具箱提供了...

    迷宫求解(8个方向),

    迷宫通常被表示为一个二维网格,其中每个格子代表一个节点,节点之间通过边相连。在8个方向的迷宫中,一个节点不仅可以上下左右移动,还能前后斜向移动,即东北、东南、西北、西南四个方向。这样的设定增加了路径的...

    Matlab 求解超效率DEA的程序.zip_carefullyf3m_dea的matlab程序_matlabDEA求解_mat

    在这个"Matlab 求解超效率DEA的程序"中,可能包含了一个完整的MATLAB脚本或函数,用于实现超效率DEA的计算过程。这个程序可能包括以下关键步骤: 1. 数据预处理:DEA模型依赖于输入和输出的数据集。首先,你需要...

    ipopt优化问题求解器

    在数学规划领域,非线性优化是寻找一个函数的最小值或最大值,其中至少有一个变量与目标函数的关系不是线性的。Ipopt采用内点法策略,这是一种在优化领域广泛应用的算法,它通过迭代逐步接近问题的最优解。 Ipopt的...

    求解一元二次方程程序设计

    本文主要介绍了使用汇编语言设计一个程序,求解一元二次方程 ax2+bx+x=0。该程序可以从键盘输入a,b,c的值,并显示方程的解。考虑所有的情况,包括共轭复根。在设计过程中,需要进行方案比较和认证、系统原理阐述、...

    写一个完整的8086汇编语言程序,求解表达式-3x-y+1的值,结果显示在屏幕上

    写一个完整的8086汇编语言程序,求解表达式-3x-y+1的值,结果显示在屏幕上

    华容道求解C语言版,求解效率极高

    在计算机科学中,华容道的求解问题是一个典型的路径搜索问题,可以通过编程解决。本文将深入探讨使用C语言实现华容道求解的高效算法,以及涉及的数据结构和内存管理。 一、C语言基础 C语言是一种强大的、高效的编程...

    EXCEL规划求解教程

    通过上述步骤,EXCEL规划求解功能不仅解决了复杂优化问题,还帮助科罗拉多牛公司节省了成本,提高了饲料配方的效率和效益。 综上所述,EXCEL规划求解功能是解决优化问题的利器,其强大的灵活性和广泛的应用场景使其...

    迷宫求解的代码

    同时,为了避免重复探索已经访问过的节点,还需要使用一个二维数组或哈希表来记录状态。 在给定的“迷宫求解”压缩包文件中,可能包含了一个迷宫求解程序的源代码,可能是用Python、C++、Java或其他编程语言实现的...

    Java程序求解方程

    在Java编程语言中,求解一元n次方程是一个涉及数值分析和数学计算的问题。一元n次方程指的是只含有一个变量的最高次幂为n的方程,如一般的n次多项式方程: \[ ax^n + bx^{n-1} + cx^{n-2} + \ldots + z = 0 \] ...

    数独求解程序游戏设计报告书

    数独(Sudoku)是一种逻辑填数字游戏,玩家需按照一定的规则在9×9的网格内填入1至9的数字,使得每一行、每一列以及每一个3×3的小宫格内的数字都不重复。数独游戏不仅能够锻炼人的逻辑思维能力,还能提高解决问题的...

    ECOS求解器求解二阶锥问题C语言程序

    ECOS求解器使用内点法,这是一种强大的算法,可以处理大规模的优化问题,并且在计算效率和内存使用上都有优秀的表现。 在C++编程环境中,我们可以利用ECOS的C接口来构建和求解二阶锥问题。ECOS的C++接口提供了一个...

    Excel 规划求解插件

    总之,Excel的规划求解插件SOLVER是一个强大的分析工具,它能够帮助用户在复杂的问题环境中找到最佳解决方案。熟练掌握其使用方法,对于提升数据分析和决策能力具有重要意义。通过实践和学习,用户可以将SOLVER应用...

    matlab基于求解器intlinprog求解TSP问题

    matlab基于求解器intlinprog求解52城市TSP...这意味着找到的最优解并没有给出一条穿过所有点的连续路径,而是有几个独立的环路。然后,你可以使用迭代过程来确定子回路,添加约束,并重新运行优化,直到消除子回路。

    迷宫求解问题

    在这个问题中,我们通常将迷宫视为一个二维矩阵,其中每个节点代表一个位置,而路径则由可通行的节点(通常是1或true)表示,墙壁或其他障碍物则用不可通行的节点(通常是0或false)表示。本项目是用C语言编写的一个...

    snopt非线性求解器

    在每个迭代步中,SNOPT会构建一个二次模型,该模型尽可能地逼近当前问题的局部几何特性,然后通过求解这个二次模型来确定下一个迭代点。这个过程会不断重复,直到满足停止准则,如满足精度要求、达到最大迭代次数...

    C写的--迷宫求解问题

    在计算机科学领域,迷宫求解问题是一个经典的图论问题,常常被用来考察算法设计和数据结构的应用。本文将深入探讨如何使用C语言和堆栈数据结构来解决此类问题。 首先,我们需要理解迷宫的基本概念。迷宫通常表示为...

    数据结构习题迷宫求解程序

    在计算机科学中,数据结构与算法是构建高效软件的基础,其中迷宫求解问题就是一个经典的数据结构应用实例。本项目以“数据结构习题迷宫求解程序”为主题,采用C++编程语言,利用MFC(Microsoft Foundation Classes)...

    使用求解器求解车间调度问题、带阻塞的车间调度问题

    车间调度问题是一个经典的运筹学问题,涉及到在有限的时间和资源条件下如何有效地安排生产任务,以达到优化目标,如最小化总完成时间、最大化设备利用率等。在这个问题中,我们通常考虑一系列作业(jobs),每个作业...

    栈的应用 - 迷宫求解

    迷宫问题是一个经典的路径搜索问题,它在游戏开发、算法设计以及计算机图形学等领域都有广泛应用。 栈在迷宫求解中的作用主要体现在路径探索和回溯。当我们在迷宫中寻找出路时,每一步都需要考虑是否可行,并记录...

Global site tag (gtag.js) - Google Analytics