2009-09-14 86 views
8

对于JDBC应用程序,我需要发出几个ALTER SESSION命令。我不想将它们放入应用程序代码本身。有没有一种方法可以为应用程序使用的数据库模式(在数据库端)指定会话参数的默认值?为Oracle用户设置默认“更改会话”

+0

@Thilo,谢谢你刚才救了我大量的时间! – 2010-04-13 08:27:19

回答

13

大多数会话参数是由客户端应用程序定义的。如果您想覆盖客户端设置,您可以创建DATABASE TRIGGER。例如,这将在BAR架构创建LOGON触发:

CREATE OR REPLACE TRIGGER bar.foo 
    AFTER LOGON ON DATABASE WHEN (USER = 'BAR') 
BEGIN 
    dbms_session.set_nls('NLS_NUMERIC_CHARACTERS', '''.,'''); 
    EXECUTE IMMEDIATE 'ALTER SESSION SET CURRENT_SCHEMA=hr'; 
END foo; 
+1

登录数据库触发器是在没有更改应用程序代码的情况下执行此操作的唯一方法。 – mathewbutler 2009-09-14 08:03:17

0

我还没有测试过这个,但是你可以让应用程序调用一个存储过程来创建会话时设置会话变量吗?然后,您可以在需要时修改服务器端的存储过程。

+0

关键是不要改变应用程序代码。如果我将其更改为包含会话创建的某些操作(例如调用存储过程),那么我可能会使这些操作可配置(例如从文件读取它们),以便直接包含ALTER SESSION调用。 – Thilo 2009-09-14 06:45:01