Itu karena --
adalah bagian dari -->
pemisah tetapi bukan bagian dari ->
pemisah.
Meskipun nilai data Anda memiliki -->
kueri ini seharusnya tidak error. Seperti di bawah ini.
SQL> select Sys_Connect_By_Path('SomeText B-->More Text' || ':' || 'SomeText A-->More Text', ' --> ') "myNewVar"
from dual
connect by rownum<=3;
myNewVar
----------------------------------------------------
--> SomeText B-->More Text:SomeText A-->More Text
--> SomeText B-->More Text:SomeText A-->More Text --> SomeText B-->More Text:SomeText A-->More Text
--> SomeText B-->More Text:SomeText A-->More Text --> SomeText B-->More Text:SomeText A-->More Text --> SomeText B-->More Text:SomeText A-->More Text
Pemisah di atas adalah -->
, perhatikan spasi putih. Spasi putih ini dianggap sebagai bagian dari pemisah yaitu chr(1)||chr(45)||chr(45)||chr(62)||chr(1)
. Seluruh string ini bukan bagian dari data atau nilai kolom Anda.
Dimana seperti di bawah ini akan error
SQL> select Sys_Connect_By_Path('SomeText B-->More Text' || ':' || 'SomeText A-->More Text', '-->') "myNewVar"
from dual
connect by rownum<=3;
ORA-30004: when using SYS_CONNECT_BY_PATH function, cannot have seperator as part of column value
30004. 00000 - "when using SYS_CONNECT_BY_PATH function, cannot have seperator as part of column value"
*Cause:
*Action: Use another seperator which does not occur in any column value,
then retry.
Pemisah di atas adalah -->
, perhatikan tidak ada spasi putih yaitu chr(45)||chr(45)||chr(62)
. Seluruh string ini memang merupakan bagian dari data atau nilai kolom Anda dan karenanya merupakan kesalahan.
Dan inilah solusinya (kinerja belum teruji)
select regexp_replace(Sys_Connect_By_Path('SomeText B-->More Text' || ':' || 'SomeText A-->More Text', ' -> '),' -> ','-->') "myNewVar"
from dual
connect by rownum<=3;
myNewVar
--------------------------------------
-->SomeText B-->More Text:SomeText A-->More Text
-->SomeText B-->More Text:SomeText A-->More Text-->SomeText B-->More Text:SomeText A-->More Text
-->SomeText B-->More Text:SomeText A-->More Text-->SomeText B-->More Text:SomeText A-->More Text-->SomeText B-->More Text:SomeText A-->More Text
Penjelasan - Di sini (dalam kueri di atas) ->
(dengan spasi) bukan bagian dari data di sini yaitu -->
. Setelah kolom terhubung dengan jalur regexp_replace
menggantikan semua kemunculan ->
dengan -->
jadi dengan cara ini Anda masih memiliki -->
sebagai pemisah Anda alih-alih ->
.