CREATE or REPLACE PROCEDURE UPDATEUSERDATA
Authid Current_User
is
delsql varchar2(400);
BEGIN
FOR T IN ( SELECT * FROM ORACLEUSER) LOOP
BEGIN
delsql := 'delete '|| T.C_USERNAME ||'.sys_group_command where c_group = ''Manager'' and c_command like ''sal.salbiz.market.%''';
execute immediate delsql;
commit;
END;
END LOOP;
END UPDATEUSERDATA;
首先是读取ORACLEUSER表字段C_USERNAME,利用dba的权限去动态更新用户某表或删除、新增数据
Authid Current_User 使用调用者权限,即假如去掉这句、调用存储过程会导致权限不足提示
引用详解:
?
虽然当前用户执行语句是有权限的,但是放到存储过程中就必须要显式的赋个权限给当前用户。
【IT168 技术文档】我们知道,用户拥有的role权限在存储过程是不可用的。如: SQL> select * from dba_role_privs where grantee='SUK'; GRANTEE GRANTED_ROLE ADMIN_OPTION DEFAULT_ROLE