2011-09-21 62 views
1

我试图在Oracle 11.1中创建物化视图,这显然不支持物化视图中的嵌套选择(为什么这是,我一直无法弄清楚)..有没有办法写这个查询作为物化视图工作?谢谢!Oracle - 重写此查询以不使用子选择的方法?

CREATE MATERIALIZED VIEW MV_Area90DayReport 
    NOLOGGING 
    CACHE 
    BUILD IMMEDIATE 
    REFRESH FAST ON COMMIT 
    AS 
    select 
     T.TASKID, 
     V.PROJECTID, 
     V.VERSIONID, 
     T.GOLDDATE, 
     P.BUSINESSLAUNCHDATE, 
     V.NAME as ProjectName, 
     T.NAME as TaskName, 
     T.COURSECODE, 
     DT.NAME as DeliveryMethod, 
     T.DELIVERABLELENGTHHOUR, 
     T.DELIVERABLELENGTHMINUTE, 
     V.PRIORITY, 
     (SELECT MIN(STARTDATE) FROM TPM_TRAININGPLAN WHERE PROJECTID=V.PROJECTID AND TRAININGPLANTYPE='prescribed') as TrainingDeliveryDate, 
     (SELECT wm_concat(WORKGROUPID) FROM TPM_PROJECTWORKGROUPS WHERE PROJECTID=V.PROJECTID GROUP BY PROJECTID) as Workgroups, 
    from TPM_TASK T 
    inner join TPM_PROJECTVERSION V ON (V.PROJECTID = T.PROJECTID AND V.VERSIONID = T.VERSIONID) 
    inner join TPM_PROJECT P ON (P.PROJECTID = T.PROJECTID) 
    inner join TPM_DOCUMENTTYPE DT ON (DT.DOCUMENTTYPEID = T.DOCUMENTTYPEID); 

我得到的错误是:

>[Error] Script lines: 1-25 ------------------------- 
ORA-22818: subquery expressions not allowed here 
Script line 20, statement line 20, column 115 

回答

1

尝试以下查询:

select 
    T.TASKID, 
    V.PROJECTID, 
    V.VERSIONID, 
    T.GOLDDATE, 
    P.BUSINESSLAUNCHDATE, 
    V.NAME as ProjectName, 
    T.NAME as TaskName, 
    T.COURSECODE, 
    DT.NAME as DeliveryMethod, 
    T.DELIVERABLELENGTHHOUR, 
    T.DELIVERABLELENGTHMINUTE, 
    V.PRIORITY, 
    TP.TrainingDeliveryDate, 
    WG.Workgroups, 
from TPM_TASK T 
inner join TPM_PROJECTVERSION V ON (V.PROJECTID = T.PROJECTID AND V.VERSIONID = T.VERSIONID) 
inner join TPM_PROJECT P ON (P.PROJECTID = T.PROJECTID) 
inner join TPM_DOCUMENTTYPE DT ON (DT.DOCUMENTTYPEID = T.DOCUMENTTYPEID) 
left join (
    SELECT PROJECTID, MIN(STARTDATE) as TrainingDeliveryDate 
    FROM TPM_TRAININGPLAN 
    WHERE TRAININGPLANTYPE='prescribed' 
    GROUP BY PROJECTID 
) TP on TP.PROJECTID=V.PROJECTID 
left join (
    SELECT PROJECTID, wm_concat(WORKGROUPID) as Workgroups 
    FROM TPM_PROJECTWORKGROUPS 
    GROUP BY PROJECTID 
) WG on WG.PROJECTID=V.PROJECTID 
+0

该查询工作,但它是相当缓慢的。这大概是6秒,而不是我的查询0.5秒。但是,对于物化视图,启用FAST UPDATE并不重要..但我还没有尝试过制作MV。 –

+0

Doh!我可能会错过。查询窗口我运行我的查询被设置为限制为50行。我创建了一个新的查询窗口并运行了查询,并且它没有行限制。我们的查询实际上是以相同的速度。 –

+0

所以现在我得到的错误:ORA-12054:无法为物化视图设置ON COMMIT刷新属性 –