我得到ORA:执行此查询时出现太多值错误

时间:2013-05-30 08:16:10

标签: oracle

select regexp_replace((select regexp_substr(reference_number, '[^|]+', 1, level), 
                       reference_number 
                       from ups_ship1 
                       connect by regexp_substr(reference_number, '[^|]+', 1, level) 
                           is not null), '(\D+)', '') 
from ups_ship1;

2 个答案:

答案 0 :(得分:2)

要理解你要做的事情有点难,但是你不能发送一个子查询的结果,该子查询返回许多行(有2列)作为regexp_replace的第一个参数。

您可以在FROM子句中使用子查询,如下所示:

select regexp_replace(rn, '(\D+)', '') 
from (select regexp_substr(reference_number, '[^|]+', 1, level) rn, 
                       reference_number 
                       from ups_ship1 
                       connect by regexp_substr(reference_number, '[^|]+', 1, level) 
                           is not null) up;

Here is a sqlfiddle demo

答案 1 :(得分:1)

很难说没有任何数据,但根据您之前的问题和Ben's answer,您将两列(您的计算的加值值和原始的管道分隔的字符串)传递给regexp_replace - 这给出了ORA-00913 - 而regexp_substr()正在返回多行,这也是错误的。

我想你想要这个:

select reference_number, regexp_replace(val, '(\D+)', '')
from (
    select regexp_substr(reference_number, '[^|]+', 1, level) val, 
        reference_number 
        from ups_ship1 
        connect by regexp_substr(reference_number, '[^|]+', 1, level) is not null
);

SQL Fiddle based on your previous question's sample data,虽然没有任何触发替换的数据。