我想删除所有在其名称开头都有'WIN'的用户(例如,'WIN $ DOWS')。是否有可能写出像follownig这样的东西?
drop user where name like 'WIN%'
答案 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;
/