Une vue matérialisée serait une excellente option pour ce que vous cherchez à faire. De cette façon, vous pouvez écrire la requête une seule fois pour la vue, puis rafraîchir les données de la vue matérialisée aussi souvent que vous le souhaitez. Vous pouvez avoir une tâche qui actualise les données une fois par nuit, le week-end ou à la fréquence de votre choix.
Une fois la vue matérialisée créée, vous pouvez également ajouter des index au-dessus de la vue matérialisée pour améliorer les performances des requêtes si vous le souhaitez.
Un exemple rapide sur la façon de créer une vue matérialisée peut être vu ci-dessous.
CREATE TABLE sale
(
product_id NUMBER,
sale_date DATE,
sale_amount NUMBER
);
INSERT INTO sale (product_id, sale_date, sale_amount)
VALUES (124, DATE '2019-02-01', 40.25);
INSERT INTO sale (product_id, sale_date, sale_amount)
VALUES (124, DATE '2019-02-01', 80.99);
INSERT INTO sale (product_id, sale_date, sale_amount)
VALUES (124, DATE '2020-02-01', 30.50);
INSERT INTO sale (product_id, sale_date, sale_amount)
VALUES (124, DATE '2020-02-01', 46.75);
CREATE MATERIALIZED VIEW sales_summary
BUILD IMMEDIATE
REFRESH FORCE ON DEMAND
AS
SELECT product_id,
SUM (sale_amount) AS annual_sales,
MAX (sale_amount) AS max_price,
MIN (sale_amount) AS min_price,
EXTRACT (YEAR FROM sale_date) AS year
FROM sale
GROUP BY product_id, EXTRACT (YEAR FROM sale_date);
Résultat
select * from sales_summary;
PRODUCT_ID ANNUAL_SALES MAX_PRICE MIN_PRICE YEAR
_____________ _______________ ____________ ____________ _______
124 121.24 80.99 40.25 2019
124 77.25 46.75 30.5 2020