如果不存在则删除表空间

时间:2011-05-30 21:01:47

标签: sql oracle plsql ddl

我已经编写了pl / sql脚本(有效,但看起来不太好):

DECLARE
   v_exists NUMBER;
BEGIN
   SELECT count(*) INTO v_exists FROM dba_tablespaces WHERE tablespace_name = 'hr_test';
   IF v_exists > 0 THEN
   BEGIN
      EXECUTE IMMEDIATE 'DROP TABLESPACE hr_test INCLUDING CONTENTS AND DATAFILES CASCADE CONSTRAINTS';
   END;
   END IF;
   EXECUTE IMMEDIATE 'CREATE TABLESPACE hr_RJ DATAFILE ''E:\hr_test_01.dbf'' SIZE 16M';
END;

有没有办法在没有EXECUTE IMMEDIATE的情况下重写此脚本?

1 个答案:

答案 0 :(得分:5)

没有。您不能在静态PL / SQL中发出DDL语句。

是的,将本机动态SQL用于DDL目的是完全可以的:

  

您需要以下动态SQL   情况:

     

您想要执行SQL数据   定义语句(如CREATE),   数据控制语句(例如   GRANT)或会话控制语句   (例如ALTER SESSION)。在PL / SQL中,   这样的陈述无法执行   静态。

Oracle dynamic SQL