我正在使用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
答案 0 :(得分:2)
原因是该表是使用双引号中的表名创建的。通常,表和列名称不区分大小写,但如果你在它们周围加上双引号,它们就会区分大小写,除非它们完全是大写的(疯狂,但是真的:-()。
要查找正确的表名和列名,可以查询数据字典:
select * from dba_tab_cols where upper(table_name) = upper('TableExample')
(如果您没有必要的权限,请使用user_tab_cols而不是dba_tab_cols)。 对于此查询返回的每个表名和列名,如果它包含除大写字符或下划线之外的任何内容,则必须引用它。
答案 1 :(得分:1)
因为'table'是一个保留字所以oracle会将其视为语法错误,例如:
select * from from ;
您可以使用双引号将其转义,但每次查询此表时都必须记住使用它们。
答案 2 :(得分:1)
这取决于您创建表格的方式。如果表也被创建为“TableExample”(带引号),则表名称区分大小写,您在选择表时需要使用引号。