1

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

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;

次の結果が得られるはずです。

@param1@param2@code@param4

そして、いろいろな方法でいくつか試してみましたが、まだできません。

彼らはあなたがこれを行うことができるかどうか知っています?? そして、正規表現がいかに深刻か。

PL/SQLを扱っています

4

2 に答える 2

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                   
--------------------------
@param1@param2@code@param4
于 2016-06-17T15:22:33.913 に答える
1

これも後方参照を使用し、あなたの例で機能します:

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

REGEXP_REPLACE('SELECT@PAR
--------------------------
@param1@param2@code@param4

同じことが 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.

@param1@param2@code@param4
于 2016-06-17T15:28:12.063 に答える