如何列出可通过数据库链接访问的表?
How to list tables from accessible via database links?
我可以访问数据库,并且确保我可以通过以下方式访问所有 tables/columns:
select * from ALL_TAB_COLUMNS
我还可以使用“@”访问某些 table,据我了解数据库 link 机制,如下所示:
select * from aaa.bbb_ddd@ffgh where jj = 55688
其中 aaa.bbb_ddd@ffgh
对应于某些 table 列 jj
但是我在 ALL_TAB_COLUMNS
.
中没有看到这个 aaa.bbb_ddd@ffgh
table
我如何通过这些数据库 link(左右)请求我可以访问的所有 table(以及其中的列)?
您无法轻松地通过所有数据库 link 访问所有列;您可以通过在远程数据库
上查询ALL_TAB_COLUMNS 来获取可通过一个数据库link 访问的所有列
select * from all_tab_columns@<remote_server>
在您的示例中,<remote_server>
为 ffgh
。
如果您想在当前模式中为 所有 数据库 link 获取相同的信息,您要么必须手动枚举它们,然后 UNION 结果一起:
select * from all_tab_columns@dblink1
union all
select * from all_tab_columns@dblink2
或者,动态地做一些事情。
,加上数据来自哪个数据库就更清楚了;您可以通过在查询中写入它来做到这一点:
select 'dblink1' as dblink, a.* from all_tab_columns@dblink1 a
union all
select 'dblink2', a.* from all_tab_columns@dblink2 a
或者通过使用内置的 Oracle 来工作,例如 GLOBAL_NAME table(还有很多方法):
select db1g.global_name, db1a.*
from all_tab_columns@dblink1 db1a
cross join global_name@dblink1 db1g
union all
select db2g.global_name, db2a.*
from all_tab_columns@dblink2 db2a
cross join global_name@dblink2 db2g
我可以访问数据库,并且确保我可以通过以下方式访问所有 tables/columns:
select * from ALL_TAB_COLUMNS
我还可以使用“@”访问某些 table,据我了解数据库 link 机制,如下所示:
select * from aaa.bbb_ddd@ffgh where jj = 55688
其中 aaa.bbb_ddd@ffgh
对应于某些 table 列 jj
但是我在 ALL_TAB_COLUMNS
.
aaa.bbb_ddd@ffgh
table
我如何通过这些数据库 link(左右)请求我可以访问的所有 table(以及其中的列)?
您无法轻松地通过所有数据库 link 访问所有列;您可以通过在远程数据库
上查询ALL_TAB_COLUMNS 来获取可通过一个数据库link 访问的所有列select * from all_tab_columns@<remote_server>
在您的示例中,<remote_server>
为 ffgh
。
如果您想在当前模式中为 所有 数据库 link 获取相同的信息,您要么必须手动枚举它们,然后 UNION 结果一起:
select * from all_tab_columns@dblink1
union all
select * from all_tab_columns@dblink2
或者,动态地做一些事情。
select 'dblink1' as dblink, a.* from all_tab_columns@dblink1 a
union all
select 'dblink2', a.* from all_tab_columns@dblink2 a
或者通过使用内置的 Oracle 来工作,例如 GLOBAL_NAME table(还有很多方法):
select db1g.global_name, db1a.*
from all_tab_columns@dblink1 db1a
cross join global_name@dblink1 db1g
union all
select db2g.global_name, db2a.*
from all_tab_columns@dblink2 db2a
cross join global_name@dblink2 db2g