2017-08-02 4 views
2

Ich habe etwa 20 schreibgeschützte Schemas, die Zugriff auf die Produktionsdatenbank benötigen. Ich möchte keine Synonyme über DBLink erstellen, also habe ich online eine Lösung gefunden, um einen Trigger zu erstellen, der mir hilft. Allen meinen schreibgeschützten Benutzern ist ein ähnliches Profil zugeordnet: "profile1".Eine Auswahl in einen Trigger einbetten

Unten finden Sie das Beispiel des Abzugs, die funktioniert:

create or replace Trigger logon_trig 
After Logon on Database 
Begin 
    IF USER in ('USER1','USER2') THEN 
     execute immediate 'ALTER SESSION SET CURRENT_SCHEMA=PRODDB'; 
    END IF; 
Exception 
    When others then 
    Null; 
End; 

Frage:

würde ich der Auslöser mag alle Benutzer mit dem Profil, um „profile1“ anstelle von mir hart codierte alle Benutzernamen in der Triggersyntax.

Gibt es eine Möglichkeit, dies zu erreichen?

Antwort

1

Sie konnten die Anzahl der passenden Zeilen zählen:

CREATE OR REPLACE TRIGGER logon_trig 
AFTER LOGON ON DATABASE 
DECLARE 
    v_count NUMBER; 
BEGIN 
SELECT USERNAME, PROFILE, ACCOUNT_STATUS FROM DBA_USERS; 

    SELECT COUNT(*) 
    INTO v_count 
    FROM dba_users 
    WHERE username = USER AND profile = 'profile1'; 

    IF v_count = 0 THEN 
     EXECUTE IMMEDIATE 'ALTER SESSION SET CURRENT_SCHEMA=PRODDB'; 
    END IF; 
EXCEPTION 
    WHEN OTHER THEN 
     NULL; 
END; 
Verwandte Themen