我想删除一些表,并写了这个过程: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