2016-08-30 5 views
0

特殊文字のセットをアプリケーションシステムに受け入れられる別のセットに置き換える必要があるプロシージャを作成しています。私がこの手順で使用している以下のステートメントを、どのように書き直すことができますか?PL/SQLで複数の文字を置換する方法

select  replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace('%BICI* "(MOTO), |X PLAY? 4G: RED&WHITE& \/<DIRETTA>','(','-'),'%','perc'),'?','.'),'|','-'),':',';'),',','.'),'<','-'),'>','-'),'&','and'),'\','-'),'/','-'),'"','-'),')','-'),'*','-') 
from dual; 

再帰的プロシージャは使用できません。 提案がありますか?

ありがとうございます! イラリア

+2

regexp_replace()を使用できます。 – XING

+0

回答を見る[ここ](http://stackoverflow.com/a/28584627/319875) –

+0

このアンサーはあなたのニーズに合っているかもしれません:http://stackoverflow.com/a/2947787/6773490 – tchibu

答えて

0

これは興味深いものです。ここでは、Florinの例に基づく実際の例を示します。

with trans_tbl(id, symbol, txt) as (
    select 1, '(', '-' from dual union 
    select 2, '%', 'perc' from dual union 
    select 3, '?', '.' from dual union 
    select 4, '|', '-' from dual union 
    select 5, ':', ';' from dual union 
    select 6, ',', '.' from dual union 
    select 7, '<', '-' from dual union  
    select 8, '>', '-' from dual union 
    select 9, '&', 'and' from dual union 
    select 10, '\', '-' from dual union  
    select 11, '/', '-' from dual union 
    select 12, '"', '-' from dual union 
    select 13, ')', '-' from dual union 
    select 14, '*', '-' from dual 
), 
data_tbl(str) as (
    select '%BICI* "(MOTO), |X PLAY? 4G: RED&WHITE& \/<DIRETTA>' from dual 
), 
working_tbl(str, id) as (
    SELECT str, 0 id 
    FROM data_tbl 
    UNION ALL 
    SELECT replace(working_tbl.str,symbol,txt), trans_tbl.id 
    FROM working_tbl 
    JOIN trans_tbl 
    ON working_tbl.id = trans_tbl.id - 1 
) 
--select str, id from working_tbl; 
SELECT str 
from working_tbl 
where id = (select max(id) 
      from trans_tbl); 

STR 
---------------------------------------------------------- 
percBICI- --MOTO-. -X PLAY. 4G; REDandWHITEand ---DIRETTA- 
関連する問題