我已经编写了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
的情况下重写此脚本?
答案 0 :(得分:5)
没有。您不能在静态PL / SQL中发出DDL语句。
是的,将本机动态SQL用于DDL目的是完全可以的:
您需要以下动态SQL 情况:
您想要执行SQL数据 定义语句(如CREATE), 数据控制语句(例如 GRANT)或会话控制语句 (例如ALTER SESSION)。在PL / SQL中, 这样的陈述无法执行 静态。