Plsql 在触发器中嵌入select
我有大约20个只读模式需要访问生产数据库。我不想在DBLink上创建同义词,所以我在网上找到了一个解决方案来创建一个触发器来帮助我。我的所有只读用户都附带了一个类似的配置文件:“profile1” 下面是工作的触发器示例:Plsql 在触发器中嵌入select,plsql,triggers,Plsql,Triggers,我有大约20个只读模式需要访问生产数据库。我不想在DBLink上创建同义词,所以我在网上找到了一个解决方案来创建一个触发器来帮助我。我的所有只读用户都附带了一个类似的配置文件:“profile1” 下面是工作的触发器示例: create or replace Trigger logon_trig After Logon on Database Begin IF USER in ('USER1','USER2') THEN execute immediate 'ALTER SES
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”的所有用户,而不是在触发器语法中硬编码所有用户名
有什么方法可以做到这一点吗?您可以计算匹配行的数量:
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;