我使用以下CREATE
语句在Oracle 10g中创建了一个表.
CREATE TABLE test ("id" NUMBER(35, 0) primary key, "description" VARCHAR2(250) not null);
基本表结构如下所示.
-------------------------------------------------------------------------------- Column Name Data Type Nullable Default Primary Key -------------------------------------------------------------------------------- id NUMBER(35, 0) No - 1 description VARCHAR2(250) No - -
应该注意的是,此CREATE
语句中的列名称用双引号括起来只是为了有趣:)
在发出这个DDL语句之后,我发出了三个DML语句来添加这么多行,如下所示.
INSERT INTO test VALUES (1, 'aaa'); INSERT INTO test VALUES (2, 'bbb'); INSERT INTO test VALUES (3, 'ccc');
最后,执行以下SELECT
语句以验证是否插入了这些行.
SELECT * FROM test;
Oracle确实显示与执行此查询时完全相同的三行.
但是当我发出以下SELECT
查询时,
SELECT id, description FROM test;
甲骨文抱怨,
ORA-00904:"DESCRIPTION":标识符无效
以下(相同)查询也是,
SELECT id FROM test;
错误,错误,
ORA-00904:"ID":标识符无效
查询也是如此,
SELECT description FROM test;
SELECT
具有元字符的唯一查询*
有效.SELECT
子句中的列表字段不起作用.在SELECT
子句中大写列名也不起作用.
它背后的原因是什么?
请不要只说,不要这样做.我很想知道背后的原因.
好吧,我不会说出来,我只是大声地想.
该文件明确表示,如果你有带引号的标识符,你要到处(我的斜体字表示强调)引用他们:
每个数据库对象都有一个名称.在SQL语句中,你代表了一个对象的名称带引号的标识符或带引号的标识符.
带引号的标识符以双引号(")开头和结尾.如果使用带引号的标识符命名模式对象,则每次引用该对象时都必须使用双引号.
未加引号的标识符不包含任何标点符号.
所以你总是要这样做:
SELECT "id", "description" FROM test;
这是一种痛苦.但显然我也只是这么想,而不是真的这么说.