SQL Query to concatenate column values from multiple rows in Oracle

前端 未结 10 1523
鱼传尺愫
鱼传尺愫 2020-11-21 07:12

Would it be possible to construct SQL to concatenate column values from multiple rows?

The following is an example:

Table A

PID
A
B
C

10条回答
  •  失恋的感觉
    2020-11-21 07:32

    As most of the answers suggest, LISTAGG is the obvious option. However, one annoying aspect with LISTAGG is that if the total length of concatenated string exceeds 4000 characters( limit for VARCHAR2 in SQL ), the below error is thrown, which is difficult to manage in Oracle versions upto 12.1

    ORA-01489: result of string concatenation is too long

    A new feature added in 12cR2 is the ON OVERFLOW clause of LISTAGG. The query including this clause would look like:

    SELECT pid, LISTAGG(Desc, ' ' on overflow truncate) WITHIN GROUP (ORDER BY seq) AS desc
    FROM B GROUP BY pid;
    

    The above will restrict the output to 4000 characters but will not throw the ORA-01489 error.

    These are some of the additional options of ON OVERFLOW clause:

    • ON OVERFLOW TRUNCATE 'Contd..' : This will display 'Contd..' at the end of string (Default is ... )
    • ON OVERFLOW TRUNCATE '' : This will display the 4000 characters without any terminating string.
    • ON OVERFLOW TRUNCATE WITH COUNT : This will display the total number of characters at the end after the terminating characters. Eg:- '...(5512)'
    • ON OVERFLOW ERROR : If you expect the LISTAGG to fail with the ORA-01489 error ( Which is default anyway ).

提交回复
热议问题