我已经编写了 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/