2016-06-27 33 views
1

我需要在下面的視圖中爲每個手動MV(Materalised View)刷新操作傳遞月(字符串)。如何在PL-SQL中創建參數化物化視圖

如果可能,請讓我知道我該如何實現這一目標?如果這是不可能的,我有其他選擇嗎?

CREATE MATERIALIZED VIEW my_warranty_orders 
    AS SELECT w.order_id, w.line_item_id, o.order_date 
    FROM warranty_orders w, orders o 
    WHERE o.order_id = o.order_id 
    AND o.sales_rep_id = 165 
    AND O.order_month = p_argument --pass the month 
    ; 

回答

2

既可以使用一個恆定的值,並重新創建物化視圖與不同的恆定每次而不是刷新它:

CREATE OR REPLACE MATERIALIZED VIEW my_warranty_orders 
    AS SELECT w.order_id, w.line_item_id, o.order_date 
     FROM warranty_orders w 
      INNER JOIN orders o 
      ON (o.order_id = o.order_id) 
     WHERE o.sales_rep_id = 165 
     AND o.order_month = DATE '2016-06-01'; 

或創建另一個表,並加入該進物化視圖:

CREATE TABLE my_warranty_orders_month (
    month DATE PRIMARY KEY 
); 

INSERT INTO my_warranty_orders_month VALUES (DATE '2016-06-01'); 

CREATE MATERIALIZED VIEW my_warranty_orders 
    AS SELECT w.order_id, w.line_item_id, o.order_date 
     FROM warranty_orders w 
      INNER JOIN orders o 
      ON (o.order_id = o.order_id) 
      INNER JOIN my_warranty_orders_month m 
      ON (o.order_month = m.month) 
     WHERE o.sales_rep_id = 165; 

然後當你要改變它:

UPDATE my_warranty_orders_month 
SET month = DATE '2016-07-01'; 

並刷新物化視圖。

+0

感謝您的飼料被刷新回來時重置上下文/客戶端信息。仍然在尋找更好的方式來刷新MV與嬰兒車。但是,您的第二個選項即時追蹤是最佳解決方法。 – user881703

0

如何使用dbms_application_info.set_client_info或上下文變量值作爲參數傳遞給MVIEW和每次MVIEW會