2015-04-21 51 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語句周圍應該停止刪除該用戶。 –