Oracle SQL语法:带引号的标识符

Wil*_*ill 3 sql oracle double-quotes

我遇到了类似的SQL查询

select "hello"
from "foo"."bar"
Run Code Online (Sandbox Code Playgroud)

我发现在Oracle中我们可以使用带引号和不带引号的标识符: 数据库对象名称和限定符

...带引号的标识符以双引号(")开头和结尾.如果使用带引号的标识符命名模式对象,则每当引用该对象时都必须使用双引号...

我问DBA他们告诉我有一个名字的表但不是"bar"

这是为什么?

Ton*_*ews 7

该表是命名的bar而不是BAR或者"bar"因为它是小写的,您只能使用双引号引用它:

select * from bar; -- will fail

select * from "bar"; -- will succeed
Run Code Online (Sandbox Code Playgroud)

道德是:永远不要创建像这样的表!

  • @ceving 你**是认真的**吗?您**想要**在您的数据库中拥有不同的表,称为“PERSON”、“person”和“Person”?很快就会了解到,在 Oracle 中,您坚持使用以字母开头的名称,之后只有字母、数字和下划线($ 和 # 也是允许的,但不鼓励)。我想这需要各种各样的... (3认同)
  • 双引号标识符是SQL-92标准!如果您想确定,请始终使用带引号的标识符,而不是依赖数据库魔术转换字符. (2认同)
  • @ceving 使用双引号标识符作为组织标准会使使用数据库变得更加烦人,尤其是当您需要直接在数据库中查找时。*最佳*组织标准是,“只使用不需要*必须*引用的标识符,然后无论如何都可以在代码中引用它们。” 不过,如果我使用需要引用的标识符,我宁愿我的数据库升级脚本在我面前炸毁。 (2认同)