Sql 如何在Oracle RDBMS中通过掩码删除用户
我想删除名字开头有“WIN”的所有用户(例如,“WIN$DOWS”)。有可能写下像下面这样的东西吗Sql 如何在Oracle RDBMS中通过掩码删除用户,sql,database,oracle,plsql,Sql,Database,Oracle,Plsql,我想删除名字开头有“WIN”的所有用户(例如,“WIN$DOWS”)。有可能写下像下面这样的东西吗 drop user where name like 'WIN%' DROP USER语句不支持WHERE子句,更不用说LIKE和通配符了 您需要从该匹配项中获取一个用户列表,并迭代该列表: --Bye Users! FOR i IN (SELECT t.username FROM DBA_USERS t WHERE t.username LIKE '
drop user where name like 'WIN%'
DROP USER语句不支持WHERE子句,更不用说LIKE和通配符了 您需要从该匹配项中获取一个用户列表,并迭代该列表:
--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;
我在没有
BEGIN
的情况下使用上述解决方案时出错<代码>异常<代码>结束语法。
这对我很有用:
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
之后添加| |“级联”
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;
/
您可能还需要/想要在最后添加
CASCADE