0
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;
4

2 に答える 2

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;

ここにsqlfiddleのデモがあります

于 2013-05-30T08:51:00.420 に答える
1

データがないとわかりにくいですが、前の質問とベンの回答に基づいて、2つの列(計算された抽出値と元のパイプ区切り文字列)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 ですが、置換をトリガーするデータはありません。

于 2013-05-30T08:52:09.943 に答える