我有大约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”的所有用户,而不是在触发器语法中对所有用户名进行硬编码。
有什么方法可以实现这个目标吗?
答案 0 :(得分: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;