Oracle 10g WM_CONCAT用法及注意點

來源:互聯網
上載者:User

標籤:style   blog   color   io   使用   ar   for   strong   sp   

 

WM_CONCAT(colName)為Oracle 10g中行資料轉列資料的內建函數,執行效果如下

表T

   A    B------------   1    2   1    3   1    4   2    1   2    3

執行語句 :

SELECT A, WM_CONCAT(B) B FROM T GROUP BY A

執行結果:

   A    B---------------   1    2,3,4   2    1,3

 

注意:

  當在包體內使用行轉列時,WM_CONCAT(colName)可以使用,但WM_CONCAT(DISTINCT colName)會在包編譯時間會報錯,

  例如,在某一包的某一預存程序中有如下語句:

 1 UPDATE D_LOWAREA L 2    SET L.BYQXH = (SELECT /*+index(b)*/ 3                    WM_CONCAT(DISTINCT XH.XHMC) 4                     FROM OLIVE.OL$_ASSOCIATIONS A, 5                          PMSBI.F_SB_SBXX_BASIC  B, 6                          PMSBI.D_XH             XH 7                    WHERE A.A IN (L.PDBYQ1, L.PDBYQ2, L.PDBYQ3) 8                      AND A.B = B.SBBH 9                      AND B.XHDM != ‘wz‘10                      AND B.XHDM = XH.XHDM);11 COMMIT;

 

     編譯時間會報如下錯誤:

     PL/SQL:ORA-30482:DISTINCT option not allowed for this function.

 

解決方案:

  使用動態SQL(字串中有單引號由兩個單引號表示):

 1    EXECUTE IMMEDIATE  2    ‘UPDATE D_LOWAREA L 3       SET L.BYQXH = (SELECT /*+index(b)*/ 4                       WMSYS.WM_CONCAT(DISTINCT XH.XHMC) 5                        FROM OLIVE.OL$_ASSOCIATIONS A, 6                             PMSBI.F_SB_SBXX_BASIC  B, 7                             PMSBI.D_XH             XH 8                       WHERE A.A IN (L.PDBYQ1, L.PDBYQ2, L.PDBYQ3) 9                         AND A.B = B.SBBH10                         AND B.XHDM != ‘‘wz‘‘11                         AND B.XHDM = XH.XHDM)‘;12     COMMIT;

 

PS:Oracle 11g以上版本可以用LISTAGG實現行轉列,寫法如下:

SELECT A, LISTAGG(B, ‘,‘) WITHIN GROUP(ORDER BY B) B FROM T GROUP BY A

 

Oracle 10g WM_CONCAT用法及注意點

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.