【问题标题】:Oracle SQL: selecting from all_tab_columns does not find existing columnOracle SQL:从 all_tab_columns 中选择未找到现有列
【发布时间】:2013-06-26 05:40:45
【问题描述】:

如果我运行以下查询:

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

我得到 0 的结果。我期待 1。

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

select foo from VIEW0;

为什么?我假设我犯了一些愚蠢的语法错误,或者我的理解错了。

【问题讨论】:

  • 您在 column_name 中搜索的值不应该是大写吗?

标签: sql oracle oracle-sqldeveloper


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    【讨论】:

      【解决方案3】:

      可能的原因是您有区分大小写的设置。

      尝试添加UPPER函数如下。

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

      【讨论】:

      • Oracle 总是以大写形式存储列名和表名;所以'foo'需要上层
      • 谢谢!就是这样!如果允许,我会在 4 分钟内投票。
      • @DmitryBychenko 我已经改变了答案。谢谢!
      • column_name 和 table_name 上的大写是不需要的,实际上其他两个大写是不需要的,因为一个已经全部大写,很容易将另一个改成大写,而不必做任何工作系统来改变情况。
      • 等等,接受答案和投票有区别吗?
      猜你喜欢
      • 2018-09-01
      • 1970-01-01
      • 2020-05-03
      • 1970-01-01
      • 2023-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-14
      相关资源
      最近更新 更多