3

来自 mysql 背景,我可以在连接 url 中设置我想用于所有 sql 查询的默认模式名称。我现在有一个需要访问的 Oracle 数据库。我知道我无法指定要在 URL 中使用的架构,因为用户是正在使用的架构名称。

我意识到我可以使用一行 SQL 代码:

ALTER SESSION SET CURRENT_SCHEMA=default_schema

该项目使用mybatis 2.3.5作为我的 SQL 框架,但我对 mybatis 完全陌生。有没有一种简单的方法来配置mybatis来完成这个?我的应用程序是 Spring 3 应用程序,因此我使用Spring DataSourceTransactionManager来管理我的事务。我认为必须让管理器了解此要求,以确保在创建新连接时发送命令。

我尝试过在线搜索,但我发现的大多数示例都包含在 SqlMaps 中的 sql 查询中的模式名称,我认为这是不好的做法。

在理想情况下,模式名称将是 URL 的一部分,这样我就可以在不接触代码的情况下更改不同环境(例如:dev、test、prod 等)的模式名称(即:仅在 JNDI 中配置/应用程序服务器级别)。如果我可以使用 Spring 配置值来设置它并且我仍然可以使用 JNDI 查找或系统环境属性来检索值,我会很高兴。

谁能指出我正确的方向?

谢谢,

埃里克

4

1 回答 1

5

据我所知,Oracle 中没有选项可以更改您的 URL 以连接到特定的用户模式。

1) mybatis:您可以在开始操作之前将当前架构设置为应得的架构。您可以在属性文件中编写规范并从该文件中设置方法的参数。在这种情况下,您无需更改代码即可更改架构。

<update id="mySetSchemaMethod" parameterClass="String">
ALTER SESSION SET CURRENT_SCHEMA = ${schemaName}
</update>

2) 触发器:如果您仅将此连接用于此特定 java 应用程序,则可以设置客户端事件触发器,以便设置您的 CURRENT_SCHEMA。这一次,您需要更改触发器以管理测试/产品更改。

CREATE OR REPLACE TRIGGER Set_Schema_On_Logon
  AFTER LOGON  
  ON MY_SCHEMA  
BEGIN  
  ALTER SESSION SET CURRENT_SCHEMA = MY_TEST_SCHEMA;  
END;  
于 2013-11-15T07:12:19.067 回答