Gestern habe ich einen PL/SQL-Code für eine Oracle Datenbank geschrieben, wo allen Nutzern Rechte entzogen werden sollten. Problem war, dass nicht jeder Nutzer diese Rechte überhaupt hatte und daher der Fehler “ORA-01927: cannot REVOKE privileges you did not grant” geworfen wurde. Untenstehend habe ich lediglich ein paar Beispiele gezeigt, wie man das abfängt.
Mein erster Ansatz war, diesen im generischen Exception-Block abzufangen:
1 2 3 4 5 6 7 BEGIN -- Placeholder for revoke the rights from USER DBMS_OUTPUT.PUT_LINE('[X] ' || USER || ';'); EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('[ ] ' || USER || ';'); END; Wenn das revoken klappt, dann wird “[X] Username” ausgegeben, wenn nicht, dann eben “[ ] Username”. Dies führt aber dazu, dass man nicht unterscheiden kann, ob ein Fehler aufgetreten ist oder ob der Nutzer nicht einfach schon ohne diese Rechte existiert hatte. Daher muss man sich eine Exception basteln:
...