Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Menyelesaikan Ralat Oracle ORA-01489 Apabila Menggabungkan Rentetan Melebihi Had 4000-Byte?
Oracle ORA-01489: Keputusan Penggabungan Rentetan Melebihi Had
Senario:
Percubaan sebentar untuk mencipta pandangan yang menggabungkan gabungan medan dan LISTAGG fungsi, anda mungkin menghadapi ralat Oracle ORA-01489: "Hasil penggabungan rentetan terlalu panjang." Ralat ini berlaku walaupun panjang medan bercantum sebenar berada di bawah had 837 bait yang dilaporkan.
Punca:
Ralat ini mengelirukan dan timbul disebabkan had SQL 4000 bait, yang digunakan untuk LISTAGG. Oleh itu, menggabungkan berbilang medan, setiap satu melebihi had ini, boleh mencetuskan ralat.
Penyelesaian:
1. Fungsi XMLAGG:
Sebagai penyelesaian, pertimbangkan untuk menggunakan fungsi XMLAGG dan bukannya LISTAGG. XMLAGG tidak mempunyai had 4000 bait.
SELECT rtrim(xmlagg(XMLELEMENT(e,text,',').EXTRACT('//text()') ).GetClobVal(),',') AS very_long_text FROM ...
2. Menggabungkan Output XMLAGG:
Jika anda perlu menggabungkan berbilang lajur setiap satunya melebihi 4000 bait, gabungkan output XMLAGG bagi setiap lajur.
SELECT ID, rtrim(xmlagg(XMLELEMENT(e,col1,',').EXTRACT('//text()') ).GetClobVal(), ',') || rtrim(xmlagg(XMLELEMENT(e,col2,',').EXTRACT('//text()') ).GetClobVal(), ',') AS very_long_text FROM ... GROUP BY ID
Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan Ralat Oracle ORA-01489 Apabila Menggabungkan Rentetan Melebihi Had 4000-Byte?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!