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:
|
|
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:
|
|
Wie man sieht, habe ich die Exception cannotrevokeprivyoudidntgrant
an den Fehlercode -1927
gebunden, was der Fehler ORA-01927 ist. Somit hat man dann ganz unkompliziert die Möglichkeit zwischen Erfolg und Misserfolg im Fehlerfall zu unterscheiden. Weiteres kann man in der Dokumentation von Oracle nachlesen.