Oracle中带引号字段的CREATE语句

Tin*_*iny 2 sql oracle ddl oracle10g

我使用以下CREATE语句在Oracle 10g中创建了一个表.

CREATE TABLE test ("id" NUMBER(35, 0) primary key, "description" VARCHAR2(250) not null);
Run Code Online (Sandbox Code Playgroud)

基本表结构如下所示.

--------------------------------------------------------------------------------
Column Name       Data Type         Nullable     Default    Primary Key 
--------------------------------------------------------------------------------
id                NUMBER(35, 0)     No           -          1
description       VARCHAR2(250)     No           -          -
Run Code Online (Sandbox Code Playgroud)

应该注意的是,此CREATE语句中的列名称用双引号括起来只是为了有趣:)

在发出这个DDL语句之后,我发出了三个DML语句来添加这么多行,如下所示.

INSERT INTO test VALUES (1, 'aaa');
INSERT INTO test VALUES (2, 'bbb');
INSERT INTO test VALUES (3, 'ccc');
Run Code Online (Sandbox Code Playgroud)

最后,执行以下SELECT语句以验证是否插入了这些行.

SELECT * FROM test;
Run Code Online (Sandbox Code Playgroud)

Oracle确实显示与执行此查询时完全相同的三行.


但是当我发出以下SELECT查询时,

SELECT id, description FROM test;
Run Code Online (Sandbox Code Playgroud)

甲骨文抱怨,

ORA-00904:"DESCRIPTION":标识符无效

以下(相同)查询也是,

SELECT id FROM test;
Run Code Online (Sandbox Code Playgroud)

错误,错误,

ORA-00904:"ID":标识符无效

查询也是如此,

SELECT description FROM test;
Run Code Online (Sandbox Code Playgroud)

SELECT具有元字符的唯一查询*有效.SELECT子句中的列表字段不起作用.在SELECT子句中大写列名也不起作用.

它背后的原因是什么?

请不要只说,不要这样做.我很想知道背后的原因.

Ale*_*ole 5

好吧,我不会说出来,我只是大声地想.

该文件明确表示,如果你有带引号的标识符,你要到处(我的斜体字表示强调)引用他们:

每个数据库对象都有一个名称.在SQL语句中,你代表了一个对象的名称带引号的标识符或带引号的标识符.

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

  • 未加引号的标识符不包含任何标点符号.

所以你总是要这样做:

SELECT "id", "description" FROM test;
Run Code Online (Sandbox Code Playgroud)

这是一种痛苦.但显然我也只是这么想,而不是真的这么说.