我有一张如下表:
select * from GENERAL_STATISTICS.PPLP_LOAD_GENSTAT2
该表的脚本非常简单:
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天。
我怎么能实现这个目标?对不起,我现在很困惑。
任何帮助表示感谢。
非常感谢。
答案 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
)
);
对于throughput
,您需要考虑end_time-start_time
= 0时的情况(例如您的第一行数据),否则您将在运行时收到ZERO_DIVIDE错误。我使用了case
表达式并在此处返回null
- 您可能更喜欢9999.99或-1或0或其他内容。
此处的duration
值以天为单位(带小数位)。如果您想要小时,分钟或秒,请乘以相关因子。