在触发器中嵌入选择
Posted
技术标签:
【中文标题】在触发器中嵌入选择【英文标题】:Embedding a select within a trigger 【发布时间】:2017-08-02 19:51:14 【问题描述】:我有大约 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;
【讨论】:
以上是关于在触发器中嵌入选择的主要内容,如果未能解决你的问题,请参考以下文章