Oracle SQL:从all_tab_columns选择不会找到现有列

5
如果我运行以下查询:
select count(*) from all_tab_columns
        where column_name = 'foo'
        and table_name = 'VIEW0';

我的结果为0,但我期望的是1。

但如果我运行以下查询,会返回许多(预期的)行:

select foo from VIEW0;

为什么?我猜测我可能犯了一些愚蠢的语法错误或者我的理解偏差很大。

你在 column_name 中搜索的值不应该是大写吗? - Joe W
3个回答

11

可能的原因是您启用了区分大小写的设置。

尝试像下面这样添加 UPPER 函数。

select count(*) from all_tab_columns
        where column_name = upper('foo')
        and table_name = 'VIEW0';

Oracle总是将列名和表名存储为大写字母,因此在'foo'上需要使用大写字母。 - Dmitry Bychenko
谢谢!就是这样!我会在4分钟后投票支持它。 - lostinthebits
@DmitryBychenko 我已经修改了答案。谢谢! - Robert
1
column_name 和 table_name 上的 upper 不需要,实际上另外两个 uppers 也是不需要的,因为一个已经全部大写了,很容易将另一个变成大写,而无需对系统进行任何修改。 - Joe W
等等,接受答案和投票有区别吗? - lostinthebits
@lostinthebits 是的!你可以只接受一个唯一的答案作为你自己问题的答案。 - Michel de Ruiter

1

ALL_TAB_COLUMNS描述了当前用户可以访问的表、视图和簇的列。请检查运行此查询的用户是否有访问所需表的权限。


0

在11g中,似乎无法从PL/SQL访问数据字典表。在PL/SQL中运行任何对all_tab_columns的选择总是返回无结果。尝试访问dba_tab_columns将无法编译,因为编译器认为该表(或视图)不存在。

我很想知道如何从PL/SQL访问数据字典。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接