Oracle 如何在PL-SQL中创建参数化物化视图
我需要通过每月(字符串)与每个手动MV(Materialized View)刷新下面的视图操作 如果这是可能的,请让我知道我如何才能做到这一点?如果不可能,我还有其他选择吗Oracle 如何在PL-SQL中创建参数化物化视图,oracle,plsql,oracle11g,Oracle,Plsql,Oracle11g,我需要通过每月(字符串)与每个手动MV(Materialized View)刷新下面的视图操作 如果这是可能的,请让我知道我如何才能做到这一点?如果不可能,我还有其他选择吗 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
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
;
使用常量值并每次使用不同的常量重新创建物化视图,而不是刷新它:
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';
并刷新物化视图。使用dbms_应用程序_info.set_client_info或上下文变量值作为mview的参数,并在每次刷新mview时重置上下文/客户端信息如何?感谢您的反馈。仍然在寻找更好的方式来刷新与婴儿车MV。但你的第二个选择是我跟踪作为首要解决办法。