2015-04-21 35 views
0

在shell脚本中,我正在使用$ USER参数使用pl/sql块删除某些用户。如果另一个参数${DROP_AB}为Y,则从光标中删除所有用户。如果传递的参数是N,如何删除除一个特定用户${USER}AB以外的所有用户?请参考下面与建议帮助:PL/SQL - 使用参数执行即时循环,if/then语句

BEGIN 
DECLARE 
    CURSOR c1 IS 
    SELECT username FROM dba_users WHERE username LIKE '${USER}%'; 
BEGIN 
    FOR user_rec IN c1 
    IF ${DROP_AB}='Y' THEN 
     LOOP 
     EXECUTE IMMEDIATE 'DROP USER ' ||user_rec.username|| ' CASCADE'; 
    ELSIF ${DROP_AB}='N' THEN 
     LOOP 
     --DROP ALL USERS EXCEPT FOR USER '${USER}AB' 
    END LOOP; 
END; 
END; 
/
+0

你不能直接将所有用户DBA_USERS并将其丢弃,即使用户输入“Y”或“N”,请运行从DBA_USERS选择用户名的select语句,你会发现SYS相关的列表模式也是如此。 将所有用户的列表删除,然后运行脚本 – anudeepks

回答

1

未经测试的代码,但财产以后沿下面的应工作线,但在评论上述建议,这将在随后的系统架构/用户错误。

BEGIN 
DECLARE 
    CURSOR c1 IS 
    SELECT username FROM dba_users WHERE username LIKE '${USER}%'; 
BEGIN 
    FOR user_rec IN c1 loop 
    IF ${DROP_AB}='Y' THEN 
     EXECUTE IMMEDIATE 'DROP USER ' ||user_rec.username|| ' CASCADE'; 
    ELSE 
     IF user_rec.username != ${USER}AB THEN 
      EXECUTE IMMEDIATE 'DROP USER ' ||user_rec.username|| ' CASCADE'; 
     END IF; 
    END IF; 
    END LOOP; 
END; 
END; 
/
+0

for else条件将会是一个更好的想法..它会删除像'$ {USER}%'之类的所有用户,除了'$ {USER} AB'? – user3224907

+0

IF user_rec.username!= $ {USER} AB THEN在drop语句周围应该停止删除该用户。 –