zoukankan      html  css  js  c++  java
  • Oracle指标级别判断

      目前有一个简单的指标级别的判断逻辑,其逻辑是在数据中通过oracle的function进行判断。

    示例为:

      select kpi1,get_kpi_level(kpi1当前值得,对比历史值) kpi_evel from XX
    

    但是用户要求区分忙时和闲时。比如12和凌晨1点的阀值是不同的,重大节假日和平时是不同的, 甚至判断的方式都有可能不同,遇到此类情况怎么办?

    step 1:设计一个二维表存储指标的阀值得和判断方式,示例格式为:

    A指标表:

    指标1 最小值1 最大值1 对应级别1 最小值2 最大值2 对应级别2 波动最小值1 波动最小值1 对应级别1 波动最小值2 波动最小值2 对应级别2...

    时间段 假日标识

    B假日表:

    假日标识 开始时间 结束时间

    在判断的过程中使用游标进行提取当前时间段对方的指标阀值的信息,进行判断,得出指标级别。

    step 2:思考对于大数据量的数据,每条数据都开启游标进行取阀值信息且这些信息都是相同的(因为每次核查的时间范围是固定的),应该怎么减少游标的使用次数?

    使用oracle package的全局变量的特性.示例程序为:

    CREATE OR REPLACE PACKAGE PKG_KPI_TEST IS
      PROCEDURE INITIALVALUE;
      FUNCTION GETVALUE RETURN VARCHAR2;
      TYPE C_TYPE IS REF CURSOR;
    END;
     
    CREATE OR REPLACE PACKAGE BODY PKG_KPI_TEST
    IS
      first_result DATE;
      hour_id NUMBER;
    
      PROCEDURE INITIALVALUE
         IS
        MYCUR C_TYPE;
      BEGIN
      
        OPEN MYCUR FOR
          SELECT SYSDATE, 123 FROM DUAL;
        DBMS_OUTPUT.PUT_LINE('全局变量初始化完成');
        FETCH MYCUR
          INTO FIRST_RESULT, HOUR_ID;
      END;
    
      FUNCTION GETVALUE
      RETURN VARCHAR2
      IS
      BEGIN
        RETURN to_char(first_result,'yyyy-mm-dd HH24:mi:ss')||','||to_char(hour_id);
      END;
    
    END PKG_KPI_TEST;
    

      每次执行时候都调用进行初始化:

    BEGIN
      PKG_KPI_TEST.INITIALVALUE;
    END;
    

      然后调用包的函数利用代表性变量进行判断。

    SELECT PKG_KPI_TEST.GETVALUE FROM dual
    

      这样就达到了减少游标使用次数的问题。

    step 3:如果取历史值过于耗时过长或消耗的资源过多,而我们的核查频率又过于频繁,可以定时将根据相应的算法将历史值存储生成一个静态配置表,每次对比都从此表中取相应的数据。

      如此一个小型简单的指标阀值判断的后台基础框架即可搭建完成。

      关于package的全局变量特性请参阅:http://blog.csdn.net/47522341/article/details/3167307

  • 相关阅读:
    .Matrix-Alpha总结展望
    .Matrix测试随笔
    Beta冲刺--第三次冲刺随笔
    Beta冲刺--第二天随笔
    Beta冲刺--第一天随笔
    专业团队——Beta冲刺凡事预则立
    专业团队Alpha总结展望——前事不忘后事之师
    专业团队——(Alpha冲刺)测试随笔
    专业团队——Alpha冲刺汇总
    总结随笔
  • 原文地址:https://www.cnblogs.com/wangn/p/3044738.html
Copyright © 2011-2022 走看看