ben*_*rre 2 oracle jdbc oracle10g
我们有2台具有相同数据库架构的服务器,但由于我们的基础架构在一台服务器上的设置方式,我们必须在所有表名前加上用户名
例如:
select * from engmon.cmts
Run Code Online (Sandbox Code Playgroud)
但是在另一台服务器上,查询需要看起来像这样
select * from cmts
Run Code Online (Sandbox Code Playgroud)
这是因为一台服务器连接到不同架构/用户名中的表.是否可以在jdbc url中更改某些内容以使两个查询看起来像#2?这样我们就不需要根据我们连接的服务器(dev或prod)动态更改sql.
有任何想法吗?
我不相信你可以对JDBC URL做任何事情.但是,您可以发出SQL语句
ALTER SESSION SET current_schema = ENGMON
Run Code Online (Sandbox Code Playgroud)
连接后立即(你也可以把它放在Oracle的登录触发器中).这将导致指示Oracle使用ENGMON模式而不是当前用户的模式来解析非限定对象名称.这对权限没有影响 - 您的会话仍然只具有分配给当前用户的权限,而不是分配给ENGMON用户.
或者,您可以为需要访问的各种表创建同义词.本地同义词(仅对您可见)或公共同义词(对所有用户可见).所以
CREATE [PUBLIC] SYNONYM cmts
FOR engmon.cmts
Run Code Online (Sandbox Code Playgroud)
同义词只需要创建一次,无论它们来自哪个应用程序,都适用于所有会话.每次都需要设置CURRENT_SCHEMA.