2008-11-12 27 views

回答

20

我相信一个登录触发器应该工作:

CREATE OR REPLACE TRIGGER db_logon 
AFTER logon ON DATABASE WHEN (USER = 'A') 
BEGIN 
    execute immediate 'ALTER SESSION SET CURRENT_SCHEMA = B'; 
END; 
+0

是的,这是我所发现的唯一的解决办法,但我不希望创建一个很长的查询(例如,当用户(真的很长的列表)。任何另一种方式? – 2008-11-12 12:45:48

+0

你能不能创建一个映射表,将用户A映射到模式B,然后在触发器中查询该表?因此,消除WHEN(USER ='A'),在此映射表中查找用户,然后决定是否需要更改当前模式 – 2008-11-12 14:35:42

+0

其实我现在正在使用后注册数据库当(1 = 1)的一部分,它的工作,感谢您的帮助托尼 – 2008-11-14 21:02:23

11

出于某种原因,托尼的触发并没有为我工作。然而,我使用相同的概念在网上找到了略微不同的触发器。

create or replace trigger set_default_schema 
after logon on my_user.schema 
begin 
    execute immediate 'alter session set current_schema=NEW_SCHEMA'; 
end; 

我只是想把它扔在那里,以防其他人有同样的问题。

1
create or replace trigger AFTER_LOGON_TSFREL 
AFTER LOGON ON "TSFRELEASEAPP".SCHEMA 
BEGIN 
    EXECUTE IMMEDIATE 'ALTER SESSION SET current_schema=TSF_RELEASE'; 
END;