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