我有查询将获取JSON字符串中的输出,当我用一个值查询它时它工作正常。
但是当我查询所有字段时抛出错误。
ORA-01489:字符串连接的结果太长
我的查询有什么问题?
查询:
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 :(得分:0)
LISTAGG
函数限制为4000字节。
您可以使用XMLAGG
和XMLELEMENT
代替LISTAGG。
此链接非常有用:
https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions215.htm
答案 1 :(得分: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;