【问题标题】:SELECT a table from oracle data dictionary从 oracle 数据字典中选择一个表
【发布时间】:2015-05-18 12:49:43
【问题描述】:

我是 SQL 新手,最近安装了 Oracle 11g。我阅读了关于从user_tables 中选择所有表格的帖子here。我正在尝试选择一个特定的表格,但按照帖子中的一些建议似乎不起作用。

以下执行正常并返回所有可用的表,包括名为 faculty_t 的表:

select * from user_tables;
select * from dba_tables;
select * from all_tables;
desc faculty_t;

但是当我执行以下操作时出现错误:

select * from user_tables where table_name = FACULTY_T;

第一组语句确认我确实有一个名为faculty_t 的表。但是,现在尝试从user_tablesall_tablesdba_tables 中选择此表似乎对我不起作用。错误消息如下所示:

ORA-00904: "FACULTY_T": invalid identifier
00904. 00000 -  "%s: invalid identifier"
*Cause:    
*Action:
Error at Line: 208 Column: 8

有什么想法吗?谢谢!

【问题讨论】:

  • 可能是因为 SQL 区分大小写??试试faculty_t而不是FACULTY_T
  • 这是我尝试的第一件事。从错误消息本身可以看出,oracle 似乎将其读取为 FACULTY_T。
  • 第一个语句对你有用吗? "从 user_tables 中选择 Faculty_t;"

标签: oracle oracle11g


【解决方案1】:

SQL 中的字符串文字包含在' 中。所以:

select * from user_tables where table_name = 'FACULTY_T';

当您执行desc faculty_t 时,SQL 引擎知道该位置需要一个表名(语法需要一个表名)。但是在您的选择查询中,sql 只是在查找恰好具有字符串数据类型的列的值,因此您需要将' 用于字符串文字。

【讨论】:

  • 表名在Oracle中以大写形式存储。
  • 我错过了那个细微的差别。它适用于用引号括起来的大写 FACULTY_T!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-14
  • 2014-01-01
  • 2012-11-22
  • 1970-01-01
  • 1970-01-01
  • 2021-12-30
相关资源
最近更新 更多