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

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

drop user where name like 'WIN%'

【问题讨论】:

    标签: sql database oracle plsql


    【解决方案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'

      【讨论】:

        猜你喜欢
        • 2018-09-09
        • 1970-01-01
        • 1970-01-01
        • 2014-09-15
        • 2021-10-28
        • 2018-09-18
        • 1970-01-01
        • 2017-07-22
        • 1970-01-01
        相关资源
        最近更新 更多