Oracle:删除满足条件的所有表空间

时间:2014-07-02 16:08:40

标签: sql oracle

我想删除数据库中所有在数据文件名中都有特定模式的表空间。

以下查询为我提供了数据文件名遵循此模式的所有表空间:

SELECT TABLESPACE_NAME FROM DBA_DATA_FILES WHERE FILE_NAME LIKE '/vol1/u06%' ;

我想删除上述查询返回的所有表空间。但是我无法弄清楚外部查询应该如何,因为DROP TABLESPACE没有采用WHERE条款。
因此,外部查询应该看起来像DROP TABLESPACE tablespace_name.....,其中tablespace_name来自上述模式匹配查询。

(我使用的是Oracle)

谢谢!

1 个答案:

答案 0 :(得分:5)

这是你需要的。但是,我要说我不推荐,因为在这样的动态脚本中删除表空间会很危险。

BEGIN
   FOR rs in (SELECT TABLESPACE_NAME 
                FROM DBA_DATA_FILES WHERE FILE_NAME LIKE '/vol1/u06%')  LOOP
      BEGIN
         EXECUTE IMMEDIATE 'DROP TABLESPACE ' || rs.TABLESPACE_NAME || ' INCLUDING CONTENTS AND DATAFILES CASCADE CONSTRAINTS';
      END;
   END LOOP;
END;