2017-03-10 9 views
0

動的クエリの一部として、in句のタプルを構成する値のリストがあります。何らかの理由で、しかしリストアのOracle RTRIM

ABC1'),('1','XYZ1 

:期待

with r1 as 
    (
    select 1 as id, 'XYZ1' as r_val 
    from dual 
    union all 
    select 2, 'ABC1' 
    from dual 
    ) 
select rtrim(listagg(r1.r_val, 
        '''),(''1'',''') within group (order by r1.r_val), 
      '''),(''1'',''') 
from r1 

これを行うには、私は、最後の値を削除するにはrtrimを使用して、各値に'),('1','を追加し、LISTAGGを使用していましたr_valが1で終わる場合、1もトリムされます。

ABC1'),('1','XYZ 

誰もこれにどのような光を当てることができますか?

答えて

2

RTRIM()の文字は、1つの文字列ではなく、セットを形成します。したがって、それぞれは個別に扱われます(here参照)。

このクエリではなぜRTRIM()が必要なのかわかりません。 listagg()は、セパレータ文字列のみをの値に置きます。

これは、あなたが欲しいものを行う必要があります。

select listagg(r1.r_val, 
       '''),(''1'',''') within group (order by r1.r_val) 
      ) 
+0

スペクタキュラー、他の誰かから感謝G.それの古いコードは、私はこのバグをクリーンアップしようとしている、今はるかに理にかなっています – JohnHC

関連する問題