Menyelesaikan ralat "Hasil penggabungan rentetan terlalu panjang" dalam fungsi LISTAGG Oracle
Alternatif diperlukan apabila fungsi LISTAGG menemui sejumlah besar data dan melemparkan ralat "Hasil penggabungan rentetan terlalu panjang".
Penyelesaian fungsi XMLAGG
Untuk mencapai fungsi yang serupa dengan LISTAGG, fungsi XMLAGG Oracle boleh digunakan. Fungsi XMLAGG mengagregatkan data ke dalam dokumen XML, membenarkan nilai yang digabungkan melebihi had LISTAGG. Sintaks berikut menunjukkan cara menggunakan XMLAGG:
<code class="language-sql">SELECT RTRIM(XMLAGG(XMLELEMENT(E,colname,',').EXTRACT('//text()') ORDER BY colname).GetClobVal(),',') AS LIST FROM tablename;</code>
Kelebihan XMLAGG
Fungsi XMLAGG mempunyai kelebihan berikut:
Contoh penggunaan
Pertimbangkan coretan kod berikut:
<code class="language-sql">SELECT SESSION_DT, C_IP, CS_USER_AGENT, listagg(WEB_LINK, ' ') WITHIN GROUP(ORDER BY C_IP, CS_USER_AGENT) "WEB_LINKS" FROM webviews GROUP BY C_IP, CS_USER_AGENT, SESSION_DT ORDER BY SESSION_DT</code>
Untuk menyelesaikan ralat yang dihadapi, LISTAGG boleh digantikan dengan XMLAGG:
<code class="language-sql">SELECT SESSION_DT, C_IP, CS_USER_AGENT, RTRIM(XMLAGG(XMLELEMENT(E,WEB_LINK,',').EXTRACT('//text()') ORDER BY WEB_LINK).GetClobVal(),',') AS "WEB_LINKS" FROM webviews GROUP BY C_IP, CS_USER_AGENT, SESSION_DT ORDER BY SESSION_DT</code>
Atas ialah kandungan terperinci Bagaimana untuk Mengatasi Ralat 'Result of String Concatenation is Too Long' Oracle Apabila Menggunakan LISTAGG?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!