Plsql 如何创建基于时间段的触发器它必须做和函数
我想在Oracle11g中创建一个触发器,它必须每5分钟对order表中price列的值求和一次。我该怎么做?正确的方法是使用一个物化视图来计算总数Plsql 如何创建基于时间段的触发器它必须做和函数,plsql,oracle11g,database-trigger,Plsql,Oracle11g,Database Trigger,我想在Oracle11g中创建一个触发器,它必须每5分钟对order表中price列的值求和一次。我该怎么做?正确的方法是使用一个物化视图来计算总数 create table t23 (id number primary key , qty number); create materialized view log on t23; create materialized view t23_total refresh force start with sysdate + 5/(60
create table t23 (id number primary key , qty number);
create materialized view log on t23;
create materialized view t23_total
refresh force
start with sysdate + 5/(60*24)
next sysdate + 5/(60*24)
as
select sum(qty) as total_qty
from t23
/
这是实现总体目标的最有效方法。每五分钟刷新一次。如果你想实时保持总数,你可以使用
create materialized view t23_total
refresh on commit
as
select sum(qty) as total_qty
from t23
/
您可以创建计划程序作业以每5分钟运行一次
declare
v_anon_block varchar2(500) :=
q'{begin
insert into mylog(log_date,total_price) select SYSDATE, SUM(price)
from order;
commit;
end;}';
begin
dbms_scheduler.create_job (
job_name => 'SUM_PRICE_JOB',
job_type => 'PLSQL_BLOCK',
job_action => v_anon_block,
start_date => SYSDATE,
repeat_interval => 'FREQ=MINUTELY;INTERVAL=5;',
enabled => TRUE,
comments => '5 minute Refresh');
end;
/
为什么要使用“旧”数据?我是说,每5分钟计算一次这个值的目的是什么?按要求及时、实时提供。创建这样做的视图或函数,例如
create or replace view v_sum_price as
select sum(price)
from orders_table;
或
这两个都很可能缺少一些附加信息(订单ID?项目ID?其他信息?)。此外,我看不出将订单表中的价格值相加有什么意义。你如何使用它?例如,对于餐厅:订单表包含以下价格:
ITEM PRICE QUANTITY
Coke 1.5 2
Burger 4.0 2
Wine 2.3 1
Salad 0.8 1
现在你们知道价格列的和等于8.6。它包含哪些有用的信息?绝对没有(或者我看不到)
如果您描述一下您要解决的问题,可能会有所帮助。这听起来不像是一项触发任务,而是某种预定任务。当某些表发生事件时触发。Tim,告诉我如何完成此任务。使用物化视图检查我的答案并让我知道它是否有效。请阅读:。
ITEM PRICE QUANTITY
Coke 1.5 2
Burger 4.0 2
Wine 2.3 1
Salad 0.8 1