Mittels SUBSTR solltest du eigentlich einen Teil herausbekommen.
Allerdings ist die Funktion auf 1Mb beschränkt und arbeitet nicht "distinct".
Solltest du also doch mehr Werte haben, liegts nicht am substring sondern an der Verkettung.

Ggf. also vorher per DISTINCT auf eindeutige Werte reduzieren.

Das Ergebnis des sys_connect_by_path kannst du auch vorher casten:

cast(sys_connect_by_path(...) as varchar(nn)) as Text

Siehe auch hier:
http://publib.boulder.ibm.com/infoce...61%74%68%22%20