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

时间:2010-12-17 04:54:28

标签: sql database oracle plsql

我想删除所有在其名称开头都有'WIN'的用户(例如,'WIN $ DOWS')。是否有可能写出像follownig这样的东西?

drop user where name like 'WIN%'

3 个答案:

答案 0 :(得分:6)

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;

答案 1 :(得分:1)

上述解决方案出现错误,但没有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;
/

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

答案 2 :(得分:1)

如果级联删除

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