sql >> データベース >  >> RDS >> Oracle

XMLAgg/XMLElementの使用中にバッファが小さすぎるエラー

    集約は問題ではありません。残っている末尾のカンマを削除しようとすると、エラーが発生します。

    XMLTypeオブジェクトであるXMLAgg結果がvarchar2に暗黙的に変換されます。また、その長さが4000文字を超えると、SQLのvarchar2値の最大長であるため(少なくともOracle 12cまで)、このエラーが発生します。

    rtrim()を呼び出す前に、値をCLOBとして明示的に取得する必要があります。 、getclobval()を使用 :

    select Rtrim(
      (Xmlagg(Xmlelement(e,wonum||',')).extract('//text()')).getclobval(),
        ',') as wolist
    from ( select w.wonum from workorder w  
      connect by prior w.wonum = w.parent and prior w.siteid = siteid 
      start with w.siteid =  'ABCD' and w.wonum = 'P1234' );
    

    独自の集計関数 を定義することもできます。 CLOBを返し、4000文字を超える文字を処理できます。これは、listagg()のように呼び出すことができます。 、XMLの回避策なし。




    1. MySQLブール全文検索を最適化する方法は? (または何に置き換えるのですか?)-C#

    2. MySQL-Mac-エラー2002-ソケットを介してローカルに接続できません...

    3. SQL Serverでカーソル変数を使用する利点(@cnカーソルを宣言)

    4. 営業時間内の時差