每个用户默认模式的Oracle设置(不改变会话)

16

有没有一种方法可以更改Oracle用户的默认模式?

我在常见问题解答中发现我可以在会话中更改它,但这不是我想要的。例如,用户始终会看到另一个模式作为默认模式。

谢谢您提前。

3个回答

23
我认为登录触发器应该能够运行:

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

是的,这是我找到的唯一解决方案,但我不想创建一个非常长的查询(例如,WHEN USER IN(非常非常长的列表))。还有其他方法吗? - Zsolt Botykai
你能否创建一个映射表,将用户A映射到模式B,然后在触发器中查询该表?这样就可以消除WHEN(USER ='A')的限制,查找映射表中的用户,然后决定是否需要更改当前模式。 - Justin Cave
实际上,我现在正在使用AFTER logon ON DB WHEN (1=1)部分,它有效了,感谢Tony的帮助。 - Zsolt Botykai

12

由于某些原因,Tony的触发器对我没有起作用。不过,我在网络上找到了一个稍微不同但使用相同概念的触发器,它却有效。

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

我只是想提出来,以防其他人也有同样的问题。


我只有在删除了 <NEW_SCHEMA'> 后面的分号和最后的 <end> 后才把它编译成功...但它仍然不起作用,当登录时默认模式没有改变!我想我在数据库上缺少一些权限! - lexu

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

我有一个名为"melanke"的用户和一个名为"melanke"的模式。如果我想查询select * from tb_melanke而不必查询select * from melanke.tb_melanke,我该怎么做?这些触发器无效。 - melanke
触发器应该可以工作,需要进行一些调试,可以尝试在登录后执行 ALTER SESSION 自己来进行测试,如果可以工作,请确保您的触发器已经设置并使用了正确的权限编译。另一个选择是使用 (公用) 同义词。 - Falco

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接