informacje w kolumnie TMP_PONYLIST
jest zbędny (istnieje gdzie indziej). Będziesz miał wiele problemów, aby go utrzymać (żadne rozwiązanie nie będzie działać poprawnie w środowisku wielu użytkowników, chyba że istnieje jakiś mechanizm blokujący).
W znormalizowanym modelu po prostu usunąłbyś tę kolumnę z modelu fizycznego. Jeśli potrzebujesz informacji, możesz użyć widoku, na przykład z Oracle 11gR2:
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;
Zobacz to SO na przykład agregacja ciągów przed 11gR2.