我已经获得了表格T的资助,我希望在以下情况之后获得此资助:
drop table T;
create table T(...);
有可能吗?
答案 0 :(得分:2)
来自Oracle Database SQL Language Reference(强调我的):
删除表会使依赖对象无效并删除表中的对象权限。如果要重新创建表,则必须重新授予表的对象权限,重新创建表的索引,完整性约束和触发器,并重新指定其存储参数。截断和替换没有这些影响。因此,使用TRUNCATE语句删除行比删除和重新创建表更有效。
因此,您需要在grant
语句后向您的脚本显式添加create table
语句。
答案 1 :(得分:2)
没有。放下对象时,将删除该对象上的任何授权。创建新对象时,即使该对象恰好与旧对象具有相同的名称,您也需要在新对象上重新授予所需的任何权限。这是放弃和重新创建对象的一个原因很少是一个好主意 - 为什么你需要放弃并重新创建你的表?
当然,您可以在删除对象之前识别所有授权,然后在创建新对象后重新创建这些授权。您可以通过查询各种数据字典表(如dba_tab_privs
)或使用dbms_metadata.get_dependent_ddl
function获取授权的DDL来实现此目的。