如何在 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 中通过掩码删除用户的主要内容,如果未能解决你的问题,请参考以下文章
在 pytorch 中通过具有线性输出层的 RNN 发送的填充批次的掩码和计算损失