是否有一个命令可以删除在Oracle 10g中创建的所有内容,以便我可以重新开始?
答案 0 :(得分:5)
清除架构的最简单方法是以DBA身份登录并删除用户:
drop user apc cascade
/
但是如果你真的想要删除对象,你需要部署一些动态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;
在大多数情况下,这应该强制删除模式中的每个对象。但是它有可能会失败(比如说某个其他会话是否锁定了某个对象)。此外,由于TYPE继承,它不处理依赖性。所以有明显的方法可以改进:自动重新运行,激活处理等。但它提供了10个启动器。
在现实世界中,与学术界的象牙塔相对,不应该有这样的程序。每个数据库构建脚本都应该具有相同且相反的回归脚本。可悲的是,情况往往并非如此。
“我不知道架构是什么”
架构是用户拥有的所有对象。它与用户无法区分,因为它们共享相同的名称,并且在创建用户时隐式创建空模式。但是,严格来说,它们是两回事。 Find out more
答案 1 :(得分:0)