2011-09-21 63 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刷新屬性 –