2017-08-02 5 views
2

本番データベースにアクセスする必要のある読取り専用スキーマが約20あります。私はDBLink上に同義語を作成したくないので、オンラインで解決策を見つけて私を助けるトリガーを作成しました。私のすべての読み取り専用ユーザーには、同様のプロファイル「profile1」が添付されています。以下はトリガー内に選択項目を埋め込む

作品トリガの例である:

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; 

質問:

私はすべてのハードコーディングの代わりに私のプロフィール「でprofile1」を持つすべてのユーザーを選択するには、トリガーをしたいと思いますトリガー構文のユーザー名。

私はこれを達成する方法はありますか?

答えて

1

あなたは一致する行の数を数えることができる:

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; 
関連する問題