2017-01-09 6 views
0

は、私はいくつかのテーブルを削除すると、この手順を書いた:PL/SQLのREGEXP_LIKEフィルタ

アイデアは、このようなテーブル名のパターンですべてのテーブルをドロップすることです
set serveroutput on 
    declare 
     type namearray is table of varchar2(50); 
     total integer; 
     name namearray; 
    begin 
     --select statement here ..., please see below 
     total :=name.count; 
     dbms_output_line(total); 

     for i in 1 .. total loop 
     dbms_output.put_line(name(i)); 
     -- execute immediate 'drop table ' || name(i) || ' purge'; 
    End loop; 
    end; 
    /

:しかし

ERROR_REPORT[2 digit][3 Capital characters][10 digits] 
example: ERROR_REPORT16MAY2014122748 

、私は正しいregexpを考え出すことができません。

select table_name bulk collect into name from user_tables where regexp_like(table_name, '^ERROR_REPORT[0-9{2}A-Z{3}0-9{10}]'); 

結果は、私は必要なすべてのテーブル名が含まれてプラスERROR_REPORT311AUG20111111111:以下は私のselect文と結果があります。これは結果に表示されるべきではありません。

次のステートメントは同じ結果を示しました。これは、A-Z {3}が正規表現に影響を与えないことを意味していました。

select table_name bulk collect into name from user_tables where regexp_like(table_name, '^ERROR_REPORT[0-9{2}0-9{10}]'); 

私の質問は正しいregexpとは何か、私の問題は何ですか?

おかげで、

アレックス

答えて

1

正しい正規表現が

'^ERROR_REPORT[0-9]{2}[A-Z]{3}[0-9]{10}' 
0

私はこの正規表現は動作するはずだと思う:

^ERROR_REPORT[0-9]{2}[A-Z]{3}[0-9]{10} 

しかし、regex101リンクをチェックしてください。私はあなたがERROR_REPORT後に2桁の数字を必要とするが、あなたの例の名前が3

+0

のおかげであることを示していると仮定してきました!そうですか。 \ dはどうですか? \ dは[0-9]と同じですか? – user1941319

+0

\ dの質問は無視してください。 – user1941319