列TMP_PONYLIST
の情報 冗長です(どこかに存在します)。それを維持するためにあらゆる種類の問題が発生します(何らかのロックメカニズムがない限り、マルチユーザー環境では解決策は正しく機能しません)。
正規化されたモデルでは、この列を物理モデルから削除するだけです。情報が必要な場合は、たとえばOracle11gR2でビューを使用できます。
CREATE OR REPLACE VIEW rider_v AS
SELECT rider_id, /*...,*/
(SELECT listagg(p.pony_name, ';') WITHIN GROUP (ORDER BY p.pony_name)
FROM t_pony p
JOIN t_rider_pony rp ON (p.pony_id = rp.pony_id)
WHERE rp.rider_id = r.rider_id) tmp_ponylist
FROM t_rider r;
このSO たとえば、11gR2より前の文字列集約。