ORA-01489: Hasil Penggabungan Rentetan Terlalu Panjang
Apabila cuba menggabungkan medan dan menggunakan fungsi LISTAGG dalam satu paparan, anda mungkin menghadapi ralat "ORA-01489: hasil penggabungan rentetan juga panjang."
Punca:
Ralat ini menunjukkan bahawa anda telah melebihi had SQL sebanyak 4000 bait, yang digunakan untuk fungsi LISTAGG.
Penyelesaian 1: XMLAGG
Untuk mengatasi had ini, anda boleh menggunakan fungsi XMLAGG dan bukannya LISTAGG. XMLAGG membolehkan hasil gabungan yang lebih besar. Contohnya:
SELECT rtrim(xmlagg(XMLELEMENT(e,text,',').EXTRACT('//text()') .GetClobVal(),',') very_long_text FROM (SELECT to_char(to_date(level,'j'), 'jsp') text FROM dual CONNECT BY LEVEL < 250 )
Penyelesaian 2: Hadkan Output Bersambung
Jika hasil gabungan anda besar, anda boleh mengehadkannya menggunakan gabungan fungsi rtrim dan substr. Contohnya:
SELECT rtrim(substr(text1 || '-' || text2, 1, 3999)) || ', ' FROM source
Penyelesaian 3: Gabungkan Keputusan XMLAGG
Jika anda perlu menggabungkan berbilang lajur yang setiap satu mempunyai 4000 bait, gabungkan output XMLAGG bagi setiap lajur . Contohnya:
SELECT ID, rtrim(xmlagg(XMLELEMENT(e,col1,',').EXTRACT('//text()') ).GetClobVal(), ',') || rtrim(xmlagg(XMLELEMENT(e,col2,',').EXTRACT('//text()') ).GetClobVal(), ',') AS very_long_text FROM DATA GROUP BY ID ORDER BY ID;
Atas ialah kandungan terperinci Cara Mengendalikan ORA-01489: Hasil Penggabungan Rentetan Terlalu Panjang dalam Oracle?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!