【发布时间】:2017-02-11 09:33:41
【问题描述】:
下面的查询将返回一个语句,该语句可用于删除当前用户 A 架构中存在的所有表(正常情况)。
select 'drop '||object_type||' '|| object_name || ';'
from user_objects
where object_type in ('VIEW','PACKAGE','SEQUENCE', 'PROCEDURE', 'FUNCTION', 'INDEX');
但是,如果 DBA 使用 SYS 或 SYSDBA 登录名运行此查询会怎样?使用 sys/sysdba 用户登录时,user_objects 视图中存在哪些对象?它会删除数据库中所有模式的所有表,还是查询会抛出错误?意图是仅删除 Schema 'A' 的对象。
【问题讨论】:
-
准确地说:查询不会丢弃任何东西。它返回将删除某些内容的语句。语句会删除视图、包和其他一些对象,但不会删除表。