我正在学习SQL,我在我的系统上安装了oracle 11g express。我正在尝试创建一个表,但是当我尝试运行以下命令时,我收到以下错误消息:
第3行的错误: ORA-00904:无效标识符
CREATE TABLE PROJECTS (
proID NUMBER(4) NOT NULL,
Desc CHAR(20),
sDate DATE,
eDate DATE,
Budget NUMBER(7,2),
maxStaff NUMBER(2)
);
有人可以告诉我我做错了吗?
感谢所有回复,我成功运行了这个命令:
CREATE TABLE PROJECTS (
proID NUMBER(4) NOT NULL,
description CHAR(20),
sDate DATE,
eDate DATE,
Budget NUMBER(7,2),
maxStaff NUMBER(2)
);
真的感谢快速回复!
克里斯
答案 0 :(得分:1)
您有DESC
作为列名。虽然你可以使用它,但你必须用引号括起来:
CREATE TABLE PROJECTS (
proID NUMBER(4) NOT NULL,
"Desc" CHAR(20),
sDate DATE,
eDate DATE,
Budget NUMBER(7,2),
maxStaff NUMBER(2)
);
每次在查询中调用时,您还必须使用引号。我建议只将该列更改为其他内容(可能是DESCRIPTION
?)
答案 1 :(得分:1)
由于DESC是保留字,因此必须用双引号将其括起来。
但是,我不建议对字段名称使用保留字,也许会更改为描述或类似的东西
答案 2 :(得分:1)
正如已经多次说过的那样,错误是由于使用保留关键字 unquoted 作为标识符引起的。为了完整起见:
所以:
CREATE TABLE T(DESC INT);
ORA-00904 ::标识符无效,
DESC
是关键字
CREATE TABLE T(Desc INT);
ORA-00904 ::无效标识符与不带引号标识符相同的原因全部转换为大写
CREATE TABLE T(" DESC" INT);
使用引号创建表格,
"DESC"
不再被视为保留关键字INSERT INTO T(" Desc")VALUES(1);
ORA-00904:" Desc":无效标识符带引号的标识符区分大小写。
的列不同"DESC"
与"Desc"
INSERT INTO T(" DESC")VALUES(1);
已插入1行
话虽如此,你应该避免使用关键字作为标识符......