我可以访问数据库,并确保只需使用即可访问所有表/列:
select * from ALL_TAB_COLUMNS
我也可以使用" @"来访问一些表,因为我理解数据库链接机制,如下所示:
select * from aaa.bbb_ddd@ffgh where jj = 55688
其中aaa.bbb_ddd@ffgh
对应于某个列jj
但我在aaa.bbb_ddd@ffgh
中没有看到此ALL_TAB_COLUMNS
表。
如何通过这些数据库链接(或左右)请求我可以访问的所有表(及其中的列)?
答案 0 :(得分:1)
您不能轻易地通过所有数据库链接访问所有列;通过查询远程数据库上的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
或者,动态地做一些事情。
As Justin says,如果添加数据来自哪个数据库,则更清楚;你可以通过在查询中写下它来做到这一点:
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