【发布时间】:2018-02-18 01:08:21
【问题描述】:
我正在使用以下查询来构建物化视图。
CREATE MATERIALIZED VIEW gcms_business_profile_mview
BUILD IMMEDIATE
REFRESH FAST
WITH PRIMARY KEY
START WITH SYSDATE
NEXT (TRUNC (SYSDATE + 1) + 20 / 96)
AS
SELECT DISTINCT obp.bp_id,
obp.bp_typ_cd,
os.spcl_desc,
obpi.frs_nm,
obpi.mdl_nm,
NVL (rep_lst_nm.lst_nm, othr_lst_nm.lst_nm) last_name,
NVL (rep_lst_nm.lst_nm_typ_id, othr_lst_nm.lst_nm_typ_id)
last_name_type_id
FROM tr_ods.ods_business_parties obp
LEFT JOIN ( SELECT bp_id,
speciality_id,
updtd_dt,
ROW_NUMBER ()
OVER (PARTITION BY bp_id ORDER BY updtd_dt DESC)
AS spec_rn
FROM tr_ods.ods_bp_specialty
WHERE updtd_dt IS NOT NULL
) obs
ON obs.bp_id = obp.bp_id
AND obs.spec_rn =1
LEFT JOIN tr_ods.ods_specialty os
ON os.speciality_id = latest_spec.speciality_id
AND os.delete_flag = 'N'
LEFT JOIN tr_ods.ods_business_party_individuals obpi
ON obpi.bp_id = obp.bp_id
LEFT JOIN (SELECT obpln1.bp_id,
obpln1.lst_nm,
obpln1.lst_nm_typ_id,
ROW_NUMBER ()
OVER (PARTITION BY obpln1.bp_id ORDER BY updtd_dt DESC)
AS lst_rn_22
FROM tr_ods.ods_business_party_last_names obpln1
WHERE lst_nm_typ_id = 22
AND updtd_dt =
(SELECT MAX (obpln2.updtd_dt)
FROM tr_ods.ods_business_party_last_names obpln2
WHERE obpln2.bp_id = obpln1.bp_id
AND obpln2.lst_nm_typ_id = 22)) rep_lst_nm
ON (rep_lst_nm.bp_id = obp.bp_id AND rep_lst_nm.lst_rn_22 = 1)
LEFT JOIN (SELECT obpln1.bp_id,
obpln1.lst_nm,
obpln1.lst_nm_typ_id,
ROW_NUMBER ()
OVER (PARTITION BY obpln1.bp_id ORDER BY updtd_dt DESC)
AS lst_rn
FROM tr_ods.ods_business_party_last_names obpln1
WHERE lst_nm_typ_id IN (21, 23)
AND updtd_dt =
(SELECT MAX (obpln2.updtd_dt)
FROM tr_ods.ods_business_party_last_names obpln2
WHERE obpln2.bp_id = obpln1.bp_id
AND obpln2.lst_nm_typ_id IN (21, 23))) othr_lst_nm
ON (othr_lst_nm.bp_id = obp.bp_id AND othr_lst_nm.lst_rn = 1)
我来了
ORA-12015:无法根据复杂查询错误消息创建快速刷新实体化视图。
我已经为所有表创建了物化视图日志。有人可以帮我解决这个问题吗?
【问题讨论】:
-
obs和os连接的目的是什么。您不会在 MView 的投影中使用它们的列,并且它们不会以任何方式过滤最终结果(因为它们是外部连接)。那么为什么不删除它们呢?这样就没有麻烦的解析功能了,MView会快速刷新。 -
我必须使用他们的专栏。问题在于 obs,我不知道如何解决它。我必须在 IST 下午 4:30 之前完成。
-
您发布的查询未显示您如何使用 MView 投影中的列,因此我们很难以对您有帮助的方式重写查询。如果情况如此紧急,您应该向我们提供所有必要信息。虽然这只是您的紧急情况,而不是我们的。
-
这是因为我无法发布整个查询。我现在通过删除左连接并添加有问题的连接来更新它。
-
好吧,这不可能快速刷新。不仅你有被禁止的分析函数,而且那些带有
max()聚合的子查询也是不允许的。不幸的是,您需要重新访问业务逻辑才能根据需要构建 MView。或者,您需要放弃 FAST 要求,或者甚至探索您是否需要 MView。此查询看起来不像典型的 MView 用例:您是否正在尝试修复可能可以通过其他方法修复的性能问题?
标签: sql oracle materialized-views