我想刪除一些表,並寫了這個過程: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
然而,我無法提出正確的正則表達式。下面是我的選擇語句和結果:
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}]');
我的問題是什麼將是正確的正則表達式,什麼是我的錯?
感謝,
亞歷
謝謝!我懂了。那麼\ d呢? \ d與[0-9]相同嗎? – user1941319
請忽略\ d上的問題。 – user1941319