0

我正在使用 Oracle 11g 和 Oracle SQL Developer 3.2.20.09。我正在创建一个程序。

为什么我PL/SQL: ORA-00942: table or view does not exist在编写这样的查询时会出错:

select * from TableExample;

但是如果我这样写查询:

select * from "TableExample";

它工作正常吗?

有没有办法使用第一个选项而不会出错?请注意,它table是使用执行上述查询的同一用户创建的。

编辑:我还注意到我必须为每个字段使用撇号,除了主键ID

4

3 回答 3

2

原因是表是用双引号括起来的表名创建的。通常,表名和列名是不区分大小写的,但是如果你在它们周围加上双引号,它们就会变得区分大小写,除非它们完全是大写的(疯狂,但真实的 :-( )。

要找到正确的表名和列名,可以查询数据字典:

select * from dba_tab_cols where upper(table_name) = upper('TableExample')

(如果您没有必要的权限,请使用 user_tab_cols 而不是 dba_tab_cols)。对于此查询返回的每个表名和列名,如果它包含除大写字符或下划线以外的任何内容,则必须将其引用。

于 2012-12-05T12:03:21.273 回答
1

因为 'table' 是保留字,所以 oracle 会将其视为语法错误,例如:

select * from from ; 

您可以使用双引号对其进行转义,但您必须记住每次查询此表时都使用它们。

于 2012-12-05T11:48:33.223 回答
1

这取决于您如何创建表。如果表也被创建为“TableExample”(带引号),则表名区分大小写,您需要在选择表时使用引号。

于 2012-12-05T11:57:58.850 回答