其他用户表的Oracle连接字符串

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.

有任何想法吗?

Jus*_*ave 5

我不相信你可以对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.