gpt4 book ai didi

Oracle ORA-30004在使用SYS_CONNECT_BY_PATH函数时,

转载 作者:行者123 更新时间:2023-12-04 11:11:34 24 4
gpt4 key购买 nike

使用ORA-30004函数时的SYS_CONNECT_BY_PATH,不能将分隔符作为列的一部分

Action: Use another seperator which does not occur in any column value, then retry.



出现以下错误:
select ...
Sys_Connect_By_Path(myVariable || ':' || mySecondVariable, ' --> ') "myNewVar",
...

作品:
select ...
Sys_Connect_By_Path(myVariable || ':' || mySecondVariable, ' -> ') "myNewVar",
...

在数据中,我们发现了一些这样的文本
  • SomeText B--More Text
  • SomeText A--More Text

  • 由于没有 '-->'或该数据中没有“ -->”,为什么第一个错误?第二个在前面和后面都有一个空间。

    最佳答案

    那是因为---->分隔符的一部分,而不是->分隔符的一部分。

    即使您的数据值具有-->,此查询也不会出错。像下面一样。

    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将所有出现的 ->替换为 -->,因此通过这种方式,您仍然可以将 -->而不是 ->用作分隔符。

    关于Oracle ORA-30004在使用SYS_CONNECT_BY_PATH函数时,,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11870605/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com