Das ist, weil --
ist ein Teil von -->
Separator, aber kein Teil von ->
Separator.
Auch wenn Ihr Datenwert -->
hat, sollte diese Abfrage keinen Fehler enthalten. Wie unten.
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
Der obige Separator ist -->
, beachten Sie die Leerzeichen. Dieser Leerraum wird als Teil des Separators angesehen, d. H. chr(1)||chr(45)||chr(45)||chr(62)||chr(1)
. Diese gesamte Zeichenfolge ist kein Teil Ihres Daten- oder Spaltenwerts.
Wo, wie unten
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.
Der Separator obige Fehler würde -->
ist, feststellen, gibt es keine Leer d.h. chr(45)||chr(45)||chr(62)
ist. Diese ganze Zeichenfolge ist in der Tat ein Teil Ihres Daten- oder Spaltenwerts und daher der Fehler.
Und hier ist eine Lösung (Leistung un-geprüft)
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
Erklärung - Hier (in der Abfrage oben) ->
(mit Leerzeichen) ist nicht Teil der Daten hier heißt -->
. Sobald die Spalte durch den Pfad verbunden ist, ersetzt die regexp_replace
alle Vorkommen von ->
durch -->
, so dass Sie immer noch -->
als Ihr Trennzeichen anstelle von ->
haben.
Ist es das Leerzeichen vor und nach dem ->? – hol
ja - der vorherige Programmierer, ich denke, versuchte ein Leerzeichen hinzuzufügen -> Leerzeichen –
Gibt es einen Tippfehler und du meintest 'SomeText B -> Mehr Text' anstatt 'SomeText B - Mehr Text'? Denn dann ist klar: Blank vor und nach ist nicht gleich. – hol