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

ORACLESQLLISTAGGが期待される結果を返さない

    これはバグ19461687に関連しているようで、この前の質問 。クエリから集計された値を11gR2または12cR1にダンプすると、次のように表示されます。

    LISTAGG_OUTPUT
    --------------------------------------------------------------------------------------------------
    Typ=1 Len=25 CharacterSet=AL32UTF8: 0,41,0,52,0,34,0,30,0,30,0,31,2c,0,41,0,52,0,34,0,30,0,30,0,32
    

    SQL *PlusおよびSQLDeveloperでは、実際の値は次のように表示されます。

    LISTAGG_OUTPUT
    ----------------------------------------
     A R 4 0 0 1, A R 4 0 0 2
    

    また、SQLDeveloperから値をコピーすることはできません。 (12cR2では、ゼロはダンプに表示されなくなり、値は間隔なしで表示され、コピーできるため、バグは修正されたようです。)

    これらのヌルバイトが原因で、Toadは値をまったく表示しないようです。おそらく、最初のヌルバイトを認識し、それを文字列ターミネータ(またはとにかくそれらの行に沿ったもの)として扱うためです。

    SQL Fiddleはこれに対処しているようですが、db <> fiddleにも問題があるようで、そのクエリが存在する場合、fiddle全体に対して何も返されません。

    テーブルの列をvarchar2として再定義できます。 nvarchar2の代わりに 、しかし、それは理由からそのデータ型であると思います。そのため、おそらく実用的ではありません。

    したがって、代わりにクエリの一部としてキャストできます:

    SELECT LISTAGG(CAST(MOD_CODE AS VARCHAR2(12)),',')
      WITHIN GROUP (ORDER BY MOD_CODE) LISTAGG_OUTPUT
    FROM XOTEST_A
    WHERE MOD_CODE IN ('AR4001','AR4002');
    
    LISTAGG_OUTPUT
    ----------------------------------------
    AR4001,AR4002
    

    または、バグ19461687のパッチで問題が修正されるかどうかを確認してください。



    1. 今日の日付が2つのDATE列の間にあるMySQL行を選択します

    2. MYSQLは、mysqlimportを使用してフォルダからcsvファイルを自動的に挿入します

    3. 式SSRSを使用して2つのデータセットを使用して計算する際に助けが必要

    4. pgDashの代替-ClusterControlを使用したPostgreSQLデータベースの監視