Lỗi ORA-01489: result of string concatenation is too long trong Oracle xảy ra khi sử dụng hàm LISTAGG() hoặc phép nối chuỗi (||) và kết quả vượt quá giới hạn kích thước chuỗi cho một giá trị VARCHAR2, cụ thể là 4000 byte trong SQL thường hoặc 32767 byte trong PL/SQL.
1. Sử dụng XMLAGG() thay thế LISTAGG()2. Sử dụng hàm DBMS_LOB.SUBSTR
Sử dụng các hàm từ gói DBMS_LOB để làm việc với các chuỗi dài hơn. Ví dụ, có thể thay thế kết quả của hàm LISTAGG bằng một đối tượng LOB (Large Object).
Ví dụ:
SELECT A.ISDN, A.NAME, A.ID_NO, A.DEVICE, DBMS_LOB.SUBSTR(CAST(LISTAGG(CASE WHEN B.DEVICE IS NOT NULL THEN B.ISDN END, '; ') WITHIN GROUP (ORDER BY B.ISDN) AS CLOB), 4000, 1) AS ISDN
FROM HAU_TMP2 A LEFT JOIN HAU_TMP3 B
ON A.ID_NO = B.ID_NO AND LOWER(A.DEVICE) = LOWER(B.DEVICE)
GROUP BY A.ISDN, A.NAME, A.ID_NO, A.DEVICE;