次のクエリを実行すると:
Select
tm.product_id,
listagg(tm.book_id || '(' || tm.score || ')',',')
within group (order by tm.product_id) as matches
from
tl_product_match tm
where
tm.book_id is not null
group by
tm.product_id
Oracle は次のエラーを返します。
ORA-01489: result of string concatenation is too long
それが失敗する理由は、listagg 関数が、サポートされていない 4000 文字を超える値を連結しようとしていることです。
ここで説明されている別の例を見てきました- http://www.oracle-base.com/articles/misc/string-aggregation-techniques.phpしかし、それらはすべて関数または手順の使用を必要とします。
関数やストアド プロシージャを呼び出す必要がなく、標準の JDBC を使用して値を読み取ることができる純粋な SQL のソリューションはありますか?
私が抱えているもう1つの問題は、私が見たほとんどの文字列集約の例が、値をそのまま読み取る方法の例を示していることです。私の例では、最初に値を変更しています(つまり、2つの列を集約しています)。