2

我可以访问数据库,并且确保我可以使用以下方式访问所有表/列:

select * from ALL_TAB_COLUMNS

我还可以使用“@”访问一些表,因为我了解数据库链接机制,如下所示:

select * from aaa.bbb_ddd@ffgh where jj = 55688

whereaaa.bbb_ddd@ffgh对应于带有一列的某个表jj

但我没有aaa.bbb_ddd@ffghALL_TAB_COLUMNS.

如何通过这些数据库链接(或其他)请求我可以访问的所有表(以及其中的列)?

4

1 回答 1

2

您无法轻松地通过所有数据库链接访问所有列;您可以通过查询远程数据库上的 ALL_TAB_COLUMNS 来获取通过一个数据库链接可访问的所有列

select * from all_tab_columns@<remote_server>

<remote_server>在您的示例中将在哪里ffgh

如果您想为当前模式中的所有数据库链接获取相同的信息,则必须手动枚举它们并将结果联合起来:

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表(还有更多方法):

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
于 2015-03-26T19:06:36.187 回答