Oracle数据库脚本删除特定角色的用户

时间:2019-01-23 19:32:48

标签: database oracle oracle-sqldeveloper oracle12c

我正在尝试为Oracle 12C数据库编写一个脚本,该脚本将允许我删除所有具有特定角色的用户,但似乎无法正确完成工作。

declare
    cursor ID_CURSOR is 
        SELECT USERNAME
            from all_users;
        WHERE granted_role = 'STUDENT'
begin
    for REC in ID_CURSOR loop
        'DROP USER REC CASCADE';
    end loop;
end;
/

2 个答案:

答案 0 :(得分:2)

您的主题行和示例光标不匹配,因此无法开始。您也不能从PL / SQL发行DDL。您将不得不使用立即执行。请参见PL / SQL手册。 -- 因此,要查找授予特定角色的用户,您可以使用

select grantee from dba_role_privs where granted_role='ROLE_NAME'

在光标中使用类似

 execute immediate 'drop user '||rec.username||' cascade;';    

但是为什么要使用PL / SQL来做到这一点?如果这是一次性的工作,那么仅使用SQL生成drop语句,假脱机结果,编辑以设置SQLPlus设置(例如“ set echo on”),然后运行生成的脚本? --Mark D Powell-

答案 1 :(得分:1)

紧跟Mark的答案-最简单的方法就是运行此脚本,复制并粘贴输出,然后运行。

select 'drop user ' || grantee || ' cascade;' as script
from dba_role_privs 
where granted_role = 'STUDENT';

但是,如果您确实要使用PL / SQL,则必须这样做。我使用了隐式游标循环,因为它很容易输入且更短。

begin
    for REC in (select grantee from dba_role_privs where granted_role = 'STUDENT')
    loop
        execute immediate 'drop user ' || REC.grantee || ' cascade';
    end loop;
end;
/