【问题标题】:Oracle setting per user default scheme (not altering a session)每个用户默认方案的 Oracle 设置(不改变会话)
【发布时间】:2010-09-21 23:11:52
【问题描述】:

有没有办法改变 oracle 用户的默认架构?

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

提前致谢。

【问题讨论】:

    标签: oracle login schema settings default


    【解决方案1】:

    我相信登录触发器应该可以工作:

    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(真的很长的列表)。还有其他方法吗?
    • 您不能创建一个将用户 A 映射到架构 B 的映射表,然后在触发器中查询该表吗?所以去掉WHEN(USER = 'A'),在这个映射表中查找用户,然后决定是否需要改变当前的schema
    • 实际上我现在正在使用 AFTER logon ON DB WHEN (1=1) 部分,它可以正常工作,感谢 Tony 的帮助。
    【解决方案2】:

    出于某种原因,托尼的触发器对我不起作用。但是,我在网上找到了一个使用相同概念的稍微不同的触发器。

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

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

    【讨论】:

    • 我只有在删除 后面的分号和最后的 后才能编译它......但它仍然不起作用,默认模式在记录时不会改变在!我想我在数据库上缺少一些特权!
    【解决方案3】:
    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,我该怎么办?此触发器不起作用。
    • 触发器应该可以工作,做一些调试,通过尝试在登录后自己执行 ALTER SESSION,如果可行,请确保您的触发器已设置并使用正确的权限编译...另一个选项是(公共)同义词
    猜你喜欢
    • 2010-11-28
    • 2012-11-13
    • 1970-01-01
    • 1970-01-01
    • 2017-12-10
    • 1970-01-01
    • 2015-08-23
    • 1970-01-01
    • 2020-02-22
    相关资源
    最近更新 更多