PL/SQL regexp_like 个过滤器
PL/SQL regexp_like filters
我想删除一些table,写了这个程序:
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;
/
我们的想法是删除所有 table 名称具有如下模式的 table:
ERROR_REPORT[2 digit][3 Capital characters][10 digits]
example: ERROR_REPORT16MAY2014122748
但是,我想不出正确的正则表达式。以下是我的 select 陈述和结果:
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}]');
结果包括我需要的所有 table 个名字加上 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}]');
我的问题是什么是正确的正则表达式,我的有什么问题?
谢谢,
亚历克斯
我认为这个正则表达式应该有效:
^ERROR_REPORT[0-9]{2}[A-Z]{3}[0-9]{10}
但是,请检查 regex101 link。我假设您在 ERROR_REPORT 之后需要 2 位数字,但您的示例名称显示 3.
正确的正则表达式是
'^ERROR_REPORT[0-9]{2}[A-Z]{3}[0-9]{10}'
我想删除一些table,写了这个程序:
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;
/
我们的想法是删除所有 table 名称具有如下模式的 table:
ERROR_REPORT[2 digit][3 Capital characters][10 digits]
example: ERROR_REPORT16MAY2014122748
但是,我想不出正确的正则表达式。以下是我的 select 陈述和结果:
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}]');
结果包括我需要的所有 table 个名字加上 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}]');
我的问题是什么是正确的正则表达式,我的有什么问题?
谢谢,
亚历克斯
我认为这个正则表达式应该有效:
^ERROR_REPORT[0-9]{2}[A-Z]{3}[0-9]{10}
但是,请检查 regex101 link。我假设您在 ERROR_REPORT 之后需要 2 位数字,但您的示例名称显示 3.
正确的正则表达式是
'^ERROR_REPORT[0-9]{2}[A-Z]{3}[0-9]{10}'