ऐसा इसलिए है क्योंकि --
-->
का एक भाग है विभाजक लेकिन ->
. का हिस्सा नहीं विभाजक।
भले ही आपके डेटा मान में -->
हो इस क्वेरी में त्रुटि नहीं होनी चाहिए। नीचे की तरह।
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
उपरोक्त विभाजक है -->
, व्हाइटस्पेस पर ध्यान दें। इस खाली जगह को विभाजक यानी chr(1)||chr(45)||chr(45)||chr(62)||chr(1)
का हिस्सा माना जाता है . यह पूरी स्ट्रिंग आपके डेटा या कॉलम मान का हिस्सा नहीं है।
जहां नीचे के रूप में त्रुटि होगी
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.
उपरोक्त विभाजक है -->
, ध्यान दें कि कोई खाली जगह नहीं है यानी chr(45)||chr(45)||chr(62)
. यह पूरी स्ट्रिंग वास्तव में आपके डेटा या कॉलम मान का एक हिस्सा है और इसलिए त्रुटि है।
और यहां एक समाधान है (प्रदर्शन परीक्षण नहीं किया गया)
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
स्पष्टीकरण - यहाँ (उपरोक्त प्रश्न में) ->
(स्पेस के साथ) यहां डेटा का हिस्सा नहीं है यानी -->
. एक बार जब कॉलम पथ से जुड़ जाता है तो regexp_replace
->
. के सभी अवसरों को प्रतिस्थापित करता है -->
के साथ तो इस तरह आपके पास अभी भी -->
. होगा ->
. के बजाय आपके विभाजक के रूप में ।