sql - 如果不存在则删除表空间

标签 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 的情况下重写这个脚本? ?

最佳答案

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

是的,将 native 动态 SQL 用于 DDL 目的是完全没问题的:

You need dynamic SQL in the following situations:

You want to execute a SQL data definition statement (such as CREATE), a data control statement (such as GRANT), or a session control statement (such as ALTER SESSION). In PL/SQL, such statements cannot be executed statically.



Oracle dynamic SQL

关于sql - 如果不存在则删除表空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6180710/

相关文章:

sql - Oracle错误: ORA-01839: date not valid for month specified

sql - 在已插入非唯一值后在 PostgreSQL 表列上强制执行唯一性

php - 如何在 desc 排序的 sql 查询中做数学公式 (res.a div res.b)

database - 数据库设计中真的需要外键吗?

sql - Oracle SQL 比较两行并返回值

database - 构建 PL/SQL IF THEN 语句的更好方法?

Oracle PL/SQL : Forwarding whole row to procedure from a trigger

sql - Hive 中的错误 : Underlying error: org. apache.hadoop.hive.ql.exec.UDFArgumentTypeException:需要一个或多个参数

sql - Oracle 在 where 中使用变量

sql - 在 Postgres 的索引处的 SELECT 上插入数组