您所指的链接适用于 MS SQL Server。 Leila 评论中的链接也适用于 SQL Server。
对于 Oracle,用户 must have DROP ANY TABLE 系统权限。
这可能不是你想要的,因为这个系统权限太具破坏性了。
Tom Kyte has 解决您的问题:
当然,这就是存储过程的全部意义所在。
为了有选择地让某人能够截断特定的表,
或某个架构拥有的所有表,您将编码:
create or replace procedure do_the_truncate as begin execute immediate
'truncate table T'; end;
或(某个模式拥有的任何表,或者如果该模式具有
删除任何表 priv ANY 表)
create or replace procedure do_the_truncate( p_tname in varchar2 ) as
begin execute immediate 'truncate table ' || p_tname; end;
然后将对该过程的执行权限授予任何需要的用户
运行该命令。由于存储过程使用基本权限运行
程序的所有者,您不需要任何强大的权限,例如
“删除任何表”以截断该表。
您可以进一步增强 do_the_truncate 存储过程,使其包含允许截断的表列表,以加强系统的安全性