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

时间:2011-01-21 21:21:23

标签: oracle jdbc oracle10g

我们有2台具有相同数据库架构的服务器,但由于我们的基础架构在一台服务器上的设置方式,我们必须在所有表名前加上用户名

例如:

select * from engmon.cmts

但是在另一台服务器上,查询需要看起来像这样

select * from cmts

这是因为一台服务器连接到不同架构/用户名中的表。是否可以在jdbc url中更改某些内容以使两个查询看起来像#2?这样我们就不需要根据我们连接的服务器(dev或prod)动态更改sql。

有什么想法吗?

1 个答案:

答案 0 :(得分:5)

我不相信你可以对JDBC URL做任何事情。但是,您可以发出SQL语句

ALTER SESSION SET current_schema = ENGMON
连接后立即

(你也可以把它放在Oracle的登录触发器中)。这将导致指示Oracle使用ENGMON模式而不是当前用户的模式来解析非限定对象名称。这对权限没有影响 - 您的会话仍然只具有分配给当前用户的权限,而不是分配给ENGMON用户。

或者,您可以为需要访问的各种表创建同义词。本地同义词(仅对您可见)或公共同义词(对所有用户可见)。所以

CREATE [PUBLIC] SYNONYM cmts
   FOR engmon.cmts

同义词只需要创建一次,无论它们来自哪个应用程序,都适用于所有会话。每次都需要设置CURRENT_SCHEMA。