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;
答案 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;
答案 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,虽然没有任何触发替换的数据。