我有一个表 T 的赠款,我希望在以下情况下获得此赠款:
drop table T;
create table T(...);
可能吗?
来自Oracle 数据库 SQL 语言参考(重点是我的):
删除表会使依赖对象无效并删除表上的对象权限。如果要重新创建表,则必须重新授予对表的对象权限,重新创建表的索引、完整性约束和触发器,并重新指定其存储参数。截断和替换没有这些影响。因此,使用 TRUNCATE 语句删除行可能比删除和重新创建表更有效。
因此,您需要在grant
语句之后将语句显式添加到脚本中create table
。
不会。在您删除对象的那一刻,对该对象的任何授权都将被删除。当您创建一个新对象时,即使该对象恰好与旧对象同名,您也需要重新授予新对象上所需的任何权限。这就是删除和重新创建对象很少是一个好主意的原因之一 - 为什么需要删除并重新创建表?
当然,您可以在删除对象之前识别所有授权,然后在创建新对象后重新创建这些授权。您可以通过查询各种数据字典表(如dba_tab_privs
) 或使用该dbms_metadata.get_dependent_ddl
函数获取授权的 DDL 来做到这一点。