0

我有一个表 T 的赠款,我希望在以下情况下获得此赠款:

drop table T;
create table T(...);

可能吗?

4

2 回答 2

2

来自Oracle 数据库 SQL 语言参考(重点是我的):

删除表会使依赖对象无效并删除表上的对象权限。如果要重新创建表,则必须重新授予对表的对象权限,重新创建表的索引、完整性约束和触发器,并重新指定其存储参数。截断和替换没有这些影响。因此,使用 TRUNCATE 语句删除行可能比删除和重新创建表更有效。

因此,您需要在grant语句之后将语句显式添加到脚本中create table

于 2013-04-25T16:03:04.757 回答
2

不会。在您删除对象的那一刻,对该对象的任何授权都将被删除。当您创建一个新对象时,即使该对象恰好与旧对象同名,您也需要重新授予新对象上所需的任何权限。这就是删除和重新创建对象很少是一个好主意的原因之一 - 为什么需要删除并重新创建表?

当然,您可以在删除对象之前识别所有授权,然后在创建新对象后重新创建这些授权。您可以通过查询各种数据字典表(如dba_tab_privs) 或使用该dbms_metadata.get_dependent_ddl函数获取授权的 DDL 来做到这一点。

于 2013-04-25T16:05:00.093 回答