1

好的,这是我的情况。我需要从另一个 Oracle 数据库用户那里查询表的列名。它与我的用户名具有相同的架构和相同的数据库连接。

这是我的查询:

Select COLUMN_NAME 
from user_tab_columns 
where table_name='CY_3TRAVELTRAX' AND User = 'PUBLISH_PNL_AFPI_2013';

但是我总是得到一个零结果,实际上用户有很多表和列。有什么帮助吗?提前致谢。

4

1 回答 1

3

对于大多数user_数据字典视图,也有all_(和dba_)视图。

文档摘录(位于http://docs.oracle.com/cd/E11882_01/server.112/e17110/statviews_1001.htm#i1572007)描述得最好:

许多数据字典表都有三个对应的视图:

  • ALL_ 视图显示当前用户可访问的所有信息,包括来自当前用户模式的信息以及来自其他模式中的对象的信息,前提是当前用户通过授予权限或角色的方式访问这些对象。

  • DBA_ 视图显示整个数据库中的所有相关信息。DBA_ 视图仅供管理员使用。它们只能由具有 SELECT ANY TABLE 权限的用户访问。此权限在系统初始安装时分配给 DBA 角色。

  • USER_ 视图显示来自当前用户模式的所有信息。查询这些视图不需要特殊权限。

所以你应该使用:

Select COLUMN_NAME
from all_tab_columns
where table_name='CY_3TRAVELTRAX'
AND owner = 'PUBLISH_PNL_AFPI_2013';

注意:要使用的列被调用OWNER而不是USER!后者是一个返回当前用户的函数(每个 DBA 在他们的职业生涯中至少被这个咬过一次)。

于 2013-05-02T09:28:28.370 回答