那是因爲--
是-->
分隔符的一部分,但不是->
分隔符的一部分。
即使您的數據值有-->
此查詢不應該錯誤。如下所示。
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
用-->
取代->
的所有出現,所以這樣您仍然可以使用-->
作爲分隔符而不是->
。
它是 - >之前和之後的空白嗎? – hol 2012-08-08 19:08:12
yes - 之前的程序員,我想嘗試添加空格 - > space – 2012-08-08 19:12:22
是否有拼寫錯誤,而您的意思是「SomeText B - > More Text」而不是「SomeText B - More Text」?因爲那很明顯:前後空白不相等。 – hol 2012-08-08 20:02:29