是否可以使用正则表达式删除表而不是单独指定字符串名称? (Oracle)的

时间:2018-01-16 12:21:46

标签: oracle

我正在使用oracle数据库。在数据库中,我有很多表。名称以" temp _...."开头:例如TEMP_EXP1,TEMP_EXP2,是否可以使用一个查询一次删除所有这些查询,例如通过指定正则表达式?

3 个答案:

答案 0 :(得分:1)

您不能使用查询删除表格。您必须使用DROP TABLE xxxx DDL。

但您可以编写一个生成所需DROP语句的查询,例如

select 'DROP TABLE '|| table_name||';' as ddl
from dba_tables where 
owner = 'xx' and
table_name <<< put here your REGEXP filter

答案 1 :(得分:1)

您可以使用一些动态SQL来删除表格;例如:

META-INF/services/javax.script.ScriptEngineFactory

答案 2 :(得分:0)

您可以遍历表格并使用EXECUTE IMMEDIATE删除它。

添加了

DBMS_OUTPUT以显示要删除的表的名称。跑步前要小心!

SET SERVEROUTPUT ON
EXEC dbms_output.enable(NULL);

BEGIN
   FOR t IN (SELECT owner, table_name
               FROM all_tables
              WHERE REGEXP_LIKE (table_name, 'TEMP_EXP\d+')) --or any other REGEX that suits you.
   LOOP
      DBMS_OUTPUT.PUT_LINE (
         'DROPPING TABLE ' || t.owner || '.' || t.table_name);

      EXECUTE IMMEDIATE 'DROP TABLE ' || t.owner || '.' || t.table_name;
   END LOOP;
END;
/