【问题标题】:ORA-00942: table or view does not exist - OracleORA-00942: 表或视图不存在 - Oracle
【发布时间】:2015-02-25 12:08:38
【问题描述】:

我正在使用 Oracle 11g 使用查询时出现此错误:

select count(*) from potluck;

所以当我使用时:

select count(*) from "potluck";

一切都好... 请告诉我为什么? 谢谢

【问题讨论】:

  • 某人创建了带有引号的表,因此区分大小写的名称 - create table "potluck" ...。当表具有这样的名称时,引用它的唯一方法是使用与第二个示例相同的大小写使用带引号的名称。如果可能,将表重命名为不带引号的名称。
  • 并且在将表重命名为非引用名称后更改所有引用该表的程序。

标签: oracle


【解决方案1】:

在 Oracle 中将双引号括在标识符周围会导致 Oracle 将该标识符视为区分大小写,而不是使用默认的不区分大小写。如果您创建一个带有双引号的表(或列),您必须始终使用双引号引用标识符并正确指定大小写(所有大写标识符除外,其中双引号没有意义)。

在幕后,Oracle 总是进行区分大小写的标识符匹配。但它总是在进行匹配之前将未双引号的标识符转换为大写。如果您在标识符周围加上双引号,Oracle 会跳过转换为大写。

所以如果你做类似的事情

CREATE TABLE my_table( 
col1 number,
col2 number
)

你可以

SELECT * FROM my_table
SELECT * FROM MY_TABLE
SELECT * FROM My_Table
SELECT * FROM "MY_TABLE"

但类似

 SELECT * FROM "my_table"

会失败。

另一方面,如果你做类似的事情

CREATE TABLE "my_other_table"( 
col1 number,
col2 number
)

你做不到

SELECT * FROM my_other_table
SELECT * FROM MY_OTHER_TABLE
SELECT * FROM My_Other_Table
SELECT * FROM "MY_OTHER_TABLE"

但是这个

SELECT * FROM "my_other_table"

会起作用

【讨论】:

  • 我个人认为引用的表(和其他数据库对象)名称是一个错误,甚至许多工具都引用了这些名称。 YMMV。
猜你喜欢
  • 2019-01-22
  • 2015-11-09
  • 2011-12-10
  • 2018-09-29
  • 2012-04-16
  • 1970-01-01
  • 1970-01-01
  • 2015-01-30
相关资源
最近更新 更多