【发布时间】:2018-11-27 18:58:41
【问题描述】:
我正在尝试构建一个脚本来删除数据库上的所有对象,因此使用以下选择,构建一个要执行的过程,该过程将使数据库完全干净(无权删除数据库并再次创建它) .首先删除所有序列、索引等,然后删除表。
select 'drop '||object_type||' '|| object_name || ';' from user_objects where object_type in ('VIEW','PACKAGE','SEQUENCE', 'PROCEDURE', 'FUNCTION', 'INDEX')
考虑到这一点,我认为这样的事情可能会奏效:
BEGIN
FOR i IN (select 'drop '||object_type||' '|| object_name || ';' from user_objects where object_type in ('VIEW','PACKAGE','SEQUENCE', 'PROCEDURE', 'FUNCTION', 'INDEX'))
LOOP
EXECUTE IMMEDIATE i;
END LOOP;
END;
/
但我明白了:
错误报告 - ORA-06550:第 5 行,第 27 列:PLS-00382:表达式为 错误类型 ORA-06550:第 5 行,第 9 列:PL/SQL:语句被忽略 06550. 00000 - “第 %s 行,第 %s 列:\n%s” *原因:通常是 PL/SQL 编译错误。 *行动:
知道如何执行此操作吗?
【问题讨论】:
-
为什么不简单地
DROP USER ... CASCADE; -
你为什么喜欢先删除索引然后删除表?如果您删除该表,则该表的所有索引也将被删除。物化视图呢?
-
DROP和CREATE用户当然是优雅的,但需要额外的权限。 -
跳过
';' -
@WernfriedDomscheit 用户没有权限执行删除用户(也不能删除自己)。你的意思是跳过';'在 select 语句中?
标签: oracle