Mit folgendem Code wird eine View erstellt, welche die Datensätze anhand des Benutzernamens filtert, der vom Client an den DB-Server übermittelt wird.
CREATE VIEW v_user_view AS SELECT col1, col2 FROM table WHERE user_login = ( SELECT LOWER((sys_context('USERENV', 'OS_USER'))) FROM DUAL );
Das Kernelement dieser Abfrage ist die Anweisung
sys_context('USERENV', 'OS_USER')
Diese gibt den Benutzernamen zurück, mit dem vom Client auf die View zugegriffen wird.
Da es sich bei der vorgenannten Anweisung um einen PL/SQL-Befehl handelt, habe ich diesen in eine SQL-Abfrage integriert. Somit wird ein Umgebungswechsel zwischen SQL und PL/SQL verhindert und die Performance der Abfrage erhöht sich bei großen Datenmengen deutlich.
Mit dieser Methode lassen sich dynamisch Views erstellen, die beispielsweise nur die Datensätze enthalten, die vom aktuellen Benutzer erstellt wurden.