使用SYS_CONNECT_BY_PATH函数时Oracle ORA-30004,
ORA-30004在使用SYS_CONNECT_BY_PATH函数时,不能将分隔符作为列的一部分
错误: select ... Sys_Connect_By_Path(myVariable || ':' || mySecondVariable,' --> ') "myNewVar",... 作品: select ... Sys_Connect_By_Path(myVariable || ':' || mySecondVariable,' -> ') "myNewVar",... 在数据中,我们发现了一些这样的文字 > SomeText B – 更多文字 由于没有’ – >’或者那个母亲没有’ – >’在数据中为什么第一个错误?第二个在前面和末端有一个空间. 那是因为 – 是 – >的一部分分隔符但不是 – >的一部分分隔器.即使您的数据值为 – >这个查询不应该出错.如下. 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将替换所有出现的 – >用 – >所以你仍然可以这样做 – >作为您的分隔符而不是 – >. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |