ORA-01489: 文字列連結の結果が長すぎます
フィールドを連結して単一ビューで LISTAGG 関数を使用しようとすると、 「ORA-01489: 文字列連結の結果が多すぎます」というエラーが発生する場合があります。 long."
原因:
このエラーは、LISTAGG 関数に適用される SQL 制限の 4000 バイトを超えたことを示します。
回避策 1: XMLAGG
回避策この制限があるため、LISTAGG の代わりに XMLAGG 関数を使用できます。 XMLAGG では、より大きな連結結果が可能になります。例:
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 )
回避策 2: 連結出力を制限する
連結結果が大きい場合は、rtrim 関数と substr 関数を組み合わせて使用して制限できます。例:
SELECT rtrim(substr(text1 || '-' || text2, 1, 3999)) || ', ' FROM source
回避策 3: XMLAGG 結果を連結する
それぞれ 4000 バイトを持つ複数の列を連結する必要がある場合は、各列の XMLAGG 出力を連結します。 。例:
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;
以上がOracle で ORA-01489: 文字列連結の結果が長すぎる場合の対処方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。