2017-07-18 41 views
0

JSON文字列で出力をフェッチする問合せがあり、1つの値で問合せを実行すると正常に動作します。ORA-01489:jsonとの文字列連結の結果が長すぎます

しかし、すべてのフィールドを照会するとエラーがスローされます。

ORA-01489:文字列連結の結果は、私のクエリが間違っている何

長すぎますか?

照会:Oracleで

with ABC_ELEMETNS as 
(
select '{' 
||' "id":"'||A.PR||'"' 
||' "de":"'||A.AA||'"' 
||' "r":"'||A.BB||'"' 
||' "r":"'||A.CC||'"' 
||' "y":"'||A.DD||'"' 
||'} ' json 
from A 
left join B on A.EE = B.EE 
where A.EE = 12345 
) 
select '{"ELEMENTS":[' 
    ||(select listagg(json, ',') 
      within group (order by 1) 
    from ABC_ELEMENTS) 
    ||']}' 
from DUAL; 
+0

を動作するはずのクエリを提示してくださいjsonデータを持つ列のデータ型 – OldProgrammer

+0

説明に自分のコードを追加 –

+0

[LISTAGG関数:「文字列連結の結果が長すぎます」](https://stackoverflow.com/questions/13795220/listagg-function-result-of-string-concatenation-is-too-long) – OldProgrammer

答えて

0

LISTAGGは> 4000

文字列の長さがテストされていない場合、動作しないことができますが、

with ABC_ELEMENTS as 
(
select '{' 
||' "id":"'||A.PR||'"' 
||' "de":"'||A.AA||'"' 
||' "r":"'||A.BB||'"' 
||' "r":"'||A.CC||'"' 
||' "y":"'||A.DD||'"' 
||'} ' json 
from A 
left join B on A.EE = B.EE 
where A.EE = 12345 
) 
select '{"ELEMENTS":[' 
    || 
RTRIM (
    XMLAGG (XMLELEMENT (E, json, ',').EXTRACT (
       '//text()') ORDER BY 1).GetClobVal(), 
    ',') 
    ||']}' 
from ABC_ELEMENTS; 
+0

こんにちは、 申し訳ありませんが私は前にこれをクリアする必要があります、私の上記のクエリは正常に動作します。 私の実際のクエリにはwhere条件がありません。 多くのJSONがプルされていて、各行に1つずつJSONが1つずつ必要です。 –