我已经编写了 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 语句。
是的,使用本机动态 SQL 来实现 DDL 目的是完全可以的:
下面需要动态SQL
情况:
你要执行一条SQL数据
定义语句(例如CREATE),
数据控制语句(例如
GRANT),或会话控制语句
(例如更改会话)。在 PL/SQL 中,
此类语句无法执行
静态地。
Oracle 动态 SQL http://download.oracle.com/docs/cd/B10500_01/appdev.920/a96624/11_dynam.htm#8845
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)