定义持续时间和吞吐量Oracle |数据发布

时间:2017-09-07 14:17:04

标签: oracle

我有一张如下表:

select  * from GENERAL_STATISTICS.PPLP_LOAD_GENSTAT2 

enter image description here

该表的脚本非常简单:

CREATE TABLE GENERAL_STATISTICS.PPLP_LOAD_GENSTAT2
(
  PPLP_NAME        VARCHAR2(100 BYTE),
  SUCCESSFUL_ROWS  VARCHAR2(100 BYTE),
  START_TIME       DATE,
  END_TIME         DATE
)

我想再做两行,一列名为Duration,另一列接下来叫做吞吐量。最后一个,吞吐量是成功的行/持续时间的结果,如果我没有弄错的话。

此外,非常需要创建另一个名为 ON_TIME 的“虚拟”列,它将比较start_time和end_time是同一天,例如在每个月的第1天。

我怎么能实现这个目标?对不起,我现在很困惑。

任何帮助表示感谢。

非常感谢。

1 个答案:

答案 0 :(得分:1)

尝试:

alter table GENERAL_STATISTICS.PPLP_LOAD_GENSTAT2
  add ( duration number generated always as (end_time - start_time)
      , throughput number generated always as 
            (case when (end_time - start_time) = 0 then null /*??? */
                  else successful_rows / (end_time - start_time)
                  end
            )
      , on_time varchar2(1) generated always as 
            (case when trunc(start_time) = trunc(end_time) 
                  then 'Y'
                  else 'N'
                  end
            )
      );

备注

  1. 对于throughput,您需要考虑end_time-start_time = 0时的情况(例如您的第一行数据),否则您将在运行时收到ZERO_DIVIDE错误。我使用了case表达式并在此处返回null - 您可能更喜欢9999.99或-1或0或其他内容。

  2. 此处的duration值以天为单位(带小数位)。如果您想要小时,分钟或秒,请乘以相关因子。