如果我运行以下查询:
select count(*) from all_tab_columns
where column_name = 'foo'
and table_name = 'VIEW0';
我得到 0 的结果。我预计1。
但是,如果我运行以下查询,我会返回许多(预期的)行:
select foo from VIEW0;
为什么?我假设我犯了一些愚蠢的语法错误,或者我的理解错了。
如果我运行以下查询:
select count(*) from all_tab_columns
where column_name = 'foo'
and table_name = 'VIEW0';
我得到 0 的结果。我预计1。
但是,如果我运行以下查询,我会返回许多(预期的)行:
select foo from VIEW0;
为什么?我假设我犯了一些愚蠢的语法错误,或者我的理解错了。
可能原因是您有区分大小写的设置。
尝试添加UPPER
如下功能。
select count(*) from all_tab_columns
where column_name = upper('foo')
and table_name = 'VIEW0';
ALL_TAB_COLUMNS 描述了当前用户可访问的表、视图和集群的列。检查运行此查询的用户是否有权访问所需的表。
至少在 11g 中,您似乎无法从 PL/SQL 访问数据字典表。在 PL/SQL 内的 all_tab_columns 上运行任何选择始终不会返回任何结果。尝试访问 dba_tab_columns 将无法编译,因为编译器认为该表(或视图)不存在。
我很想看看如何从 PL/SQL 访问数据字典。