如何在 Oracle RDBMS 中通过掩码删除用户

Posted

技术标签:

【中文标题】如何在 Oracle RDBMS 中通过掩码删除用户【英文标题】:How to drop users by mask in the Oracle RDBMS 【发布时间】:2010-12-17 04:54:27 【问题描述】:

我想删除所有名称开头带有“WIN”的用户(例如,“WIN$DOWS”)。是否可以写类似follownig的东西?

drop user where name like 'WIN%'

【问题讨论】:

【参考方案1】:

DROP USER 语句不支持 WHERE 子句,更不用说 LIKE 和通配符了。

您需要从DBA_USERS 获取匹配的用户列表,并遍历该列表:

--Bye Users!
FOR i IN (SELECT t.username
            FROM DBA_USERS t
           WHERE t.username LIKE 'WIN%') LOOP
  EXECUTE IMMEDIATE 'drop user '|| i.username ||'';
END LOOP;

【讨论】:

你可能也需要/想要在最后添加CASCADE【参考方案2】:

万一级联删除

BEGIN
  FOR i IN (
    SELECT t.username
    FROM DBA_USERS t
    WHERE t.username LIKE 'WIN%') 
  LOOP
    EXECUTE IMMEDIATE 'DROP USER '|| i.username || ' CASCADE';
  END LOOP;
 EXCEPTION WHEN OTHERS THEN
   dbms_output.put_line(sqlerrm);
END;
/

【讨论】:

【参考方案3】:

如果没有 BEGIN .. EXCEPTION .. END 语法,我在上面的解决方案中遇到了错误。 这对我有用:

BEGIN
  FOR i IN (
    SELECT t.username
    FROM DBA_USERS t
    WHERE t.username LIKE 'WIN%') 
  LOOP
    EXECUTE IMMEDIATE 'DROP USER '|| i.username;
  END LOOP;
 EXCEPTION WHEN OTHERS THEN
   dbms_output.put_line(sqlerrm);
END;
/

对于级联删除,在i.username 之后添加|| ' CASCADE'

【讨论】:

以上是关于如何在 Oracle RDBMS 中通过掩码删除用户的主要内容,如果未能解决你的问题,请参考以下文章

如何杀死oracle死锁进程

在 pytorch 中通过具有线性输出层的 RNN 发送的填充批次的掩码和计算损失

如何在 Oracle 中通过 xmltype 解析 XML

SQL实战新手入门:删除视图

如何在 AWS Sagemaker 中检索分段掩码中使用的标签

ORACLE怎么恢复被删除的DEPT表