Oracle SQL:从 all_tab_columns 中选择未找到现有列
Posted
技术标签:
【中文标题】Oracle SQL:从 all_tab_columns 中选择未找到现有列【英文标题】:Oracle SQL: selecting from all_tab_columns does not find existing column 【发布时间】: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 中搜索的值不应该是大写吗? 【参考方案1】:至少在 11g 中,您似乎无法从 PL/SQL 访问数据字典表。在 PL/SQL 内的 all_tab_columns 上运行任何选择始终不会返回任何结果。尝试访问 dba_tab_columns 将无法编译,因为编译器认为该表(或视图)不存在。
我很想看看如何从 PL/SQL 访问数据字典。
【讨论】:
【参考方案2】:ALL_TAB_COLUMNS describes the columns of the tables, views, and clusters accessible to the current user. 检查运行此查询的用户是否有权访问所需的表。
【讨论】:
【参考方案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 上的大写是不需要的,实际上其他两个大写是不需要的,因为一个已经全部大写,很容易将另一个改成大写,而不必做任何工作系统来改变情况。 等等,接受答案和投票有区别吗?以上是关于Oracle SQL:从 all_tab_columns 中选择未找到现有列的主要内容,如果未能解决你的问题,请参考以下文章
从 SQL Server 转换 Oracle 中的更新 SQL
上新 | 《Oracle数据库管理从入门到精通》《Oracle PL/SQL从入门到精通 》
创建 SSIS 包 - 将数据从 Oracle 复制到 SQL Server
从Oracle到SQL Server和从SQL Server到Oracle的迁移指南
从 c# 执行写为 .sql 文件(例如:spool.sql)的 oracle spool 命令,就像使用 OracleCommand 执行任何 oracle 查询一样