ORA-12015:无法从复杂查询创建快速刷新物化视图

时间:2017-09-09 06:23:27

标签: sql oracle materialized-views

我使用下面的查询来构建物化视图。

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:无法从复杂的查询错误消息创建快速刷新物化视图。

我已经为所有表创建了物化视图日志。任何人都可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

CREATE MATERIALIZED VIEW - Restrictions on FAST Refresh

  

快速刷新的限制

     

FAST刷新受以下限制:

     

在创建时指定FAST刷新时,Oracle数据库会进行验证   您正在创建的物化视图符合快速条件   刷新。在ALTER中将刷新方法更改为FAST时   MATERIALIZED VIEW语句,Oracle数据库不执行此操作   验证。如果物化视图不符合快速条件   刷新,然后Oracle数据库在您尝试时返回错误   刷新这个观点。

     
      
  • 如果定义,物化视图不符合快速刷新的条件   查询包含分析函数或XMLTable函数。

  •   
  • 如果定义,物化视图不符合快速刷新的条件   query引用了一个定义了XMLIndex索引的表。

  •   
  • 如果其任何列是,则无法快速刷新实例化视图   加密。

  •   

您的查询包含分析结果:

ROW_NUMBER () OVER (PARTITION BY bp_id ORDER BY updtd_dt DESC) 

因此您无法对此查询使用快速刷新。