清除模式的最简单方法是以DBA身份登录并删除用户:
drop user apc cascade
/
Run Code Online (Sandbox Code Playgroud)
但是,如果您真的想要删除对象,则需要部署一些动态SQL.
declare
stmt varchar2(2000);
begin
for r in ( select object_type, object_name
from user_objects
where object_type in
( 'TYPE', 'PACKAGE', 'FUNCTION', 'PROCEDURE',
'SEQUENCE', 'VIEW', 'TABLE', 'MATERIALIZED VIEW')
_
loop
stmt := 'drop '||r.object_type||' '||r.object_name;
-- to avoid failures due to foreign keys
if r.object_type = 'TABLE' then
stmt := stmt || ' cascade constraints';
end if;
execute immediate stmt;
end loop;
end;
Run Code Online (Sandbox Code Playgroud)
在大多数情况下,这应该强制删除模式中的每个对象.但是它有可能会失败(比如说某个其他会话是否锁定了某个对象).此外,由于TYPE继承,它不处理依赖性.因此,有明显的方法可以改进:自动重新运行,重复处理等.但它提供十个启动器.
在现实世界中,与学术界的象牙塔相对,不应该有这样的程序.每个数据库构建脚本都应该具有相同且相反的回归脚本.可悲的是,情况往往并非如此.
"我不知道架构是什么"
模式是用户拥有的所有对象.它与用户无法区分,因为它们共享相同的名称,并且在创建用户时隐式创建空模式.但是,严格来说,它们是两回事. 了解更多.