2011-11-01 36 views
2

我有以下查詢:Oracle的哪些SKU支持WM_CONCAT?

SELECT wm_concat(DISTINCT NAME) as Methods FROM TPM_TRAININGPLAN 
JOIN TPM_DELIVERYMETHODS USING (METHODID) 
WHERE PROJECTID=735 AND VERSIONID=1 
ORDER BY NAME 

在我們的生產數據庫(一些超級昂貴的Oracle SKU,成本比我家*以上),則返回:

I/OLT,ILT-WEB,OLT,QRG 

然而,在我的本地Oracle Express實例(11克),我使用的發展,我得到的錯誤:

>[Error] Script lines: 13-16 ------------------------ 
ORA-00904: "WM_CONCAT": invalid identifier 
Script line 13, statement line 1, column 7 

Oracle是否快遞不支持這一點,還是有一個變通(如因爲我可以從我們的生產服務器複製功能,或運行一些腳本來「模仿」它?)謝謝!

*沒有認真,它實際上比我的房子花費更多。

UPDATE:

至於建議,我試過LISTAGG功能(這的確是包含在這兩個快遞11g和「我們要購買的Oracle許可證或第二遊艇」 SKU這似乎差不多的工作。 ,但有一些缺點,我不能找到一個很好的解決辦法首先,查詢:

SELECT LISTAGG(NAME, ',') WITHIN GROUP (ORDER BY NAME) Methods FROM 
TPM_TRAININGPLAN 
JOIN TPM_DELIVERYMETHODS USING (METHODID) WHERE PROJECTID=240 AND VERSIONID=1 

返回結果:

COMM,COMM,ILT-F2F,ILT-F2F,ILT-F2F,ILT-F2F,ILT-F2F 

但是,我想刪除這些蠢事。更改NAMEDISTINCT NAME將拋出錯誤DISTINCT option not allowed for this function

那麼大,我們就折騰了CTE在那裏:

WITH Methods AS 
    (SELECT DISTINCT NAME 
    FROM TPM_TRAININGPLAN 
    JOIN TPM_DELIVERYMETHODS USING (METHODID) WHERE PROJECTID=240 AND VERSIONID=1) 
SELECT LISTAGG(NAME, ',') WITHIN GROUP (ORDER BY NAME) Methods FROM Methods 

這工作,但我忘了提,我跑這整個事情在更大的查詢中嵌套選擇。看起來你可以嵌套選擇包含一個CTE,但是在查詢中,你不能再引用根查詢,只能引用CTE。所以現在我不能用我所在的行取代240和1。

+0

什麼是* Oracle SKU *? –

+0

http://en.wikipedia.org/wiki/Stock-keeping_unit –

+0

@MikeChristensen我不是這樣說的:「所以現在我不能用我所在的行取代240和1。」您是否需要將projectId和/或versionId上的聚合分組? – Harrison

回答

2

,如果你是在11gR2中,你應該能夠做到listagg

with fake_data as(

select 'I/OLT' NAME , 1 aa from dual 
union all 
select 'ILT-WEB' NAME,2 from dual 
union all 
select 'OLT' NAME,3 from dual 
union all 
select 'QRG' NAME,4 from dual 
) 
SELECT 
     LISTAGG(NAME, ', ') WITHIN GROUP (ORDER BY name) name_list 
FROM fake_data 
; 

NAME_LIST                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      
-------------------------- 
I/OLT, ILT-WEB, OLT, QRG 

我沒有Oracle快捷11gR2的測試這個(只是企業)。 但Oracle Express沒有Java支持,但您可以嘗試通過自定義類型來實現它(我再次沒有Express來測試!) http://asktom.oracle.com/pls/asktom/f?p=100:11:0::NO::P11_QUESTION_ID:2196162600402

+0

看起來幾乎完美!我試了一下,並在上面添加了我的評論。我認爲我們正處於正確的軌道上。 –