【发布时间】:2014-08-11 13:58:28
【问题描述】:
我试图弄清楚如何反转结果的路径。假设结果路径是 abc/def/ghi ,所以我需要反转它,所以结果被读取为“ghi/def/abc”。
我已经搜索过这个,Vincent (Reverse in Oracle this path z/y/x to x/y/z) 提供了一个解决方案。
但是,当我尝试执行相同操作时,我收到错误“参数 '0' 超出范围”。
以下是我所做的:
SQL> variable path varchar2(4000); SQL> exec :path := 'a/b/c/def';
PL/SQL procedure successfully completed
path
a/b/c/def
SQL> SELECT regexp_substr(:path, '[^/]+', 1, ROWNUM) sub_path, ROWNUM rk 2 from dual 3 CONNECT BY LEVEL <= length(regexp_replace(:path, '[^/]', '')) + 1;
SUB_PATH RK
a 1 b 2 c 3 def 4
path
a/b/c/def
SQL> SELECT MAX(sys_connect_by_path(sub_path, '/')) reversed_path 2 FROM (SELECT regexp_substr(:path, '[^/]+', 1, ROWNUM) sub_path, 3 ROWNUM rk 4 FROM dual 5 CONNECT BY LEVEL <= length(regexp_replace(:path, '[^/]', '')) + 1) 6 CONNECT BY PRIOR rk = rk + 1 7 START WITH rk = length(regexp_replace(:path, '[^/]', '')) + 1;
ORA-01428: argument '0' is out of range
path
a/b/c/def
我试过了,但很难找出这个错误的原因。一旦我能够理解,也许我可以将它用于我的查询以生成反向路径。仅供参考,REVERSE 函数不起作用,因为它只会反转不是所需结果的字符。
非常感谢任何帮助或提示。非常感谢!!
【问题讨论】:
-
在小提琴中为我工作:sqlfiddle.com/#!4/6023b/3