ทัก*_*ลดำ 0 sql database oracle
create table ROOM
(NO_ROOM INT PRIMARY KEY, TYPE VARCHAR2(8) NOT NULL, SIZE VARCHAR2(8) NOT NULL)
;
Run Code Online (Sandbox Code Playgroud)
我得到ORA-00904,我认为问题来自NO_ROOM.我尝试使用NUMBER,它是一样的.
PS.我为没有房间类型和大小的房间做桌子.
SIZE是保留关键字.这意味着我们不能将它用作标识符(除非我们将它放在双引号中,但双引号标识符是Teh Suck!所以不要这样做).将列名更改为ROOMSIZE,您的语句将运行.
请注意,这TYPE也是一个关键字,但不是保留.因此我们可以将它用作列标识符.直到8年才引入类型; 制作TYPE保留关键字会在全世界的Oracle应用程序中破坏代码,尤其是在自己的数据字典中.
该文档包含保留字的完整列表. 在这里找到它.
为什么要使用"SIZE"这么糟糕的主意?毕竟,正如@JavaBeginner所说,SQL标准确实允许它.
一旦我们选择使用双引号来绕过Oracle的命名规则,每当我们引用该列时,我们都会被谴责使用它们.因此,这不是一个有效的查询:
select no_room, size
from room
where size > 10
Run Code Online (Sandbox Code Playgroud)
我们不得不写:
select no_room, "SIZE"
from room
where "SIZE" > 10
Run Code Online (Sandbox Code Playgroud)
它始终必须是"SIZE":"size"是一个不同的标识符.也是"Size".
最佳实践是对标准允许的内容的明智解释.如果我们想构建一个健壮且可维护的数据库,SQL允许我们做一些我们不应该做的事情.不使用双引号标识符属于该类别.