“设置默认值”;“更改会话”;对于Oracle用户

“设置默认值”;“更改会话”;对于Oracle用户,oracle,session,configuration,Oracle,Session,Configuration,对于JDBC应用程序,我需要发出几个ALTER SESSION命令。我不想把这些放进应用程序代码本身。是否有一种方法可以为应用程序使用的数据库架构(在数据库端)指定会话参数的默认值?我还没有测试过这一点,但是您能否让应用程序调用一个存储过程,以便在创建会话时设置会话变量?然后,您可以根据需要在服务器端修改存储过程。大多数会话参数都是由客户端应用程序定义的。如果要覆盖客户端设置,可以创建数据库触发器。例如,这将在栏模式上创建登录触发器: CREATE OR REPLACE TRIGGER bar.

对于JDBC应用程序,我需要发出几个ALTER SESSION命令。我不想把这些放进应用程序代码本身。是否有一种方法可以为应用程序使用的数据库架构(在数据库端)指定会话参数的默认值?

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

大多数会话参数都是由客户端应用程序定义的。如果要覆盖客户端设置,可以创建
数据库触发器
。例如,这将在
模式上创建
登录
触发器:

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;

关键是根本不更改应用程序代码。如果我将其更改为在会话创建时包含一些操作(如调用存储过程),我可能会将这些操作设置为可配置的(如从文件中读取),这样我就可以直接包含ALTER会话调用。登录时数据库触发器是在不更改应用程序代码的情况下执行此操作的唯一方法。@Thilo,谢谢你帮我节省了很多时间!