Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Menyelesaikan Ralat Oracle ORA-01489 Apabila Menggabungkan Rentetan Melebihi Had 4000-Byte?

Bagaimana untuk Menyelesaikan Ralat Oracle ORA-01489 Apabila Menggabungkan Rentetan Melebihi Had 4000-Byte?

DDD
DDDasal
2025-01-05 13:12:40435semak imbas

How to Resolve Oracle ORA-01489 Error When Concatenating Strings Exceeding the 4000-Byte Limit?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn