首页 > 解决方案 > 是否可以为会话设置默认 ORACLE dblink 并避免使用@dblink_name 后缀

问题描述

我有一个 Oracle 数据库,其中有几个公共 dblink 供各种客户使用。所有客户的所有链接数据库都是相同的。此外,我的主机上只有一个模式,我在其中存储了带有一些数据检索逻辑的数据库视图。目前,如果我想从不同的客户那里检索相同的数据,我必须为每个客户创建单独的几乎相同的视图:

CREATE VIEW my_view_for_cliet1 AS 
SELECT *
FROM table1@dblink1;

CREATE VIEW my_view_for_cliet2 AS 
SELECT *
FROM table1@dblink2 

是否可以为会话(或类似的东西)设置默认 dblink,并且只有一个没有显式 dblink 的数据库视图,例如:

CREATE VIEW my_view AS 
    SELECT *
    FROM table1;

-- below I want to retrieve data from 3rd client 
ALTER SESSION SET DEFAULT DBLINK dblink3;
 
SELECT * FROM my_view;

PS 我在链接的机器上只有 SELECT 权限,所以我不能创建任何视图或其他对象。

标签: oraclesessiondblink

解决方案


不,那是不可能的。每个对 dblink 的引用都必须是显式的。

请注意,(到目前为止)提出的每个其他解决方案都可以给出您所要求的外观,但仍然需要在所有实际视图中明确引用 dblink ,因此每个新链接和/或客户端用户的相同 DDL 更改. 没有办法避免在某个级别创建这些单独的视图或显式引用(我相信这是您所要求的),即使您在某种程度上对用户隐藏它们。


推荐阅读