【问题标题】:Oracle Database Script to Delete Users of Certain Role删除特定角色用户的 Oracle 数据库脚本
【发布时间】:2019-01-23 19:32:48
【问题描述】:

我正在尝试为我的 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;
/

【问题讨论】:

    标签: database oracle oracle-sqldeveloper oracle12c


    【解决方案1】:

    你的主题行和你的示例光标不匹配开始。您也不能从 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”,然后运行生成的脚本? -- 马克 D 鲍威尔 --

    【讨论】:

      【解决方案2】:

      跟进 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;
      /
      

      【讨论】:

        猜你喜欢
        • 2020-11-19
        • 2019-11-01
        • 1970-01-01
        • 2014-07-05
        • 2021-08-12
        • 1970-01-01
        • 1970-01-01
        • 2019-04-18
        • 2012-06-03
        相关资源
        最近更新 更多