oracle清空一个分区,利用Truncate清空Oracle各个分区的资料 | 学步园

/*

In

applications, users need truncate privileges on third party tables. The

owner of the table can truncate his/her own tables. A user with DBA

role granted can truncate a third party table. Any user with "drop any

table" system privilege can truncate a third party table.

It is

not recommended in Production environments to grant powerful roles like

DBA role or privileges like "drop any table" privilege to accomplish

this purpose.

This procedure need to be created in each schema. The

schema owner need to grant execute permission to the user, and the

delete permission on specified tables.

Then the user can execute the procedure to truncate tables User A owns the table temp_jp.

conn uwclass/uwclass

CREATE TABLE t1 AS

SELECT * FROM all_tables;

CREATE OR REPLACE PROCEDURE trunc_tab(p_tabname IN VARCHAR2) AUTHID DEFINER AS

/**********************************

AUTHOR JP Vijaykumar

ORACLE DBA

**********************************/

v_num    NUMBER(10):=0;

v_owner  VARCHAR2(30);

v_user   VARCHAR2(30);

sql_stmt VARCHAR2(2000);

BEGIN

SELECT username

INTO v_owner

FROM user_users;

SELECT sys_context('USERENV','SESSION_USER')

INTO v_user

FROM dual;

sql_stmt:='TRUNCATE TABLE ' || v_owner || '.' || p_tabname;

IF (v_owner = v_user) THEN

execute immediate sql_stmt;

ELSE

SELECT COUNT(*)

INTO v_num

FROM all_tab_privs

WHERE table_name = UPPER(p_tabname)

AND table_schema = v_owner

AND grantee = v_user

AND privilege in 'DELETE';

IF (v_num > 0) THEN

execute immediate sql_stmt;

ELSE

RAISE_APPLICATION_ERROR(-20001,'Insufficient privileges.');

END IF;

END IF;

EXCEPTION

WHEN OTHERS THEN

RAISE_APPLICATION_ERROR(-20001,'Insufficient privileges');

END trunc_tab;

/

GRANT execute ON t1 TO abc;

conn abc/abc

exec uwclass.trunc_tab('T1');

conn uwclass/uwclass

GRANT delete ON t1 TO abc;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值