2016-06-17 41 views
1

@で始まる単語を除いて、ORACLEの動的クエリのすべての単語をNULLに置き換える必要がある正規表現を作成する必要があります。たとえば:正規表現IN SQL

SQL:

SQL: SELECT @param1, column2, column3, @param2 FROM dual WHERE @code = code_table AND amount > @param4 + 50 

REGEXP_REPLACE

DECLARE 
    vl_result VARCHAR2(1000); 
BEGIN 
    vl_result := REGEXP_REPLACE('SELECT @param1, column2, column3, @param2 FROM dual WHERE @code = code_table AND amount > @param4 + 50', 'EXP_REG', ''); 
    dbms_output.put_line(vl_result); 
END; 

を使用するには、次の結果が必要です。

@[email protected]@[email protected] 

を、様々な方法で、まだできないいくつかを試してみてください。

あなたはこれを行うことができますか?正規表現の深刻さ

は、私はPL/SQLを処理してい

答えて

1

これもuses a back reference、そしてあなたの例のために動作します:

select REGEXP_REPLACE('SELECT @param1, column2, column3, @param2 FROM dual WHERE @code = code_table AND amount > @param4 + 50', 
    '[^@]?(@[[:alnum:]]+)?', '\1') 
from dual; 

REGEXP_REPLACE('[email protected] 
-------------------------- 
@[email protected]@[email protected] 

同じことPL/SQLの作品です(@boneistsもちろん):

set serveroutput on 
DECLARE 
    vl_result VARCHAR2(1000); 
BEGIN 
    vl_result := REGEXP_REPLACE('SELECT @param1, column2, column3, @param2 FROM dual WHERE @code = code_table AND amount > @param4 + 50', 
     '[^@]?(@[[:alnum:]]+)?', '\1'); 
    dbms_output.put_line(vl_result); 
END; 
/

PL/SQL procedure successfully completed. 

@[email protected]@[email protected] 
4

与え例えば次のような作品:

select REGEXP_REPLACE('SELECT @param1, column2, column3, @param2 FROM dual WHERE @code = code_table AND amount > @param4 + 50', '.*?((@[^ ,]+)|$)', '\1') new_str 
from dual; 

NEW_STR     
-------------------------- 
@[email protected]@[email protected] 
+0

私はそれをたくさんいただきありがとうございます – rodrixd