为什么下面的说法
select * from expertrule where rule_id = '1';
Run Code Online (Sandbox Code Playgroud)
返回此错误
ORA-00904: "RULE_ID": invalid identifier
Run Code Online (Sandbox Code Playgroud)
尽管
select * from expertrule where "rule_id" = '1';
Run Code Online (Sandbox Code Playgroud)
作品!
表格的每一列(只有这个表格)也是如此。此特定表中的所有列都需要将其名称括起来。为什么?
CREATE TABLE "TEST"."expertrule"
( "rule_id" NUMBER(*,0),
"name" VARCHAR2(256 BYTE),
"description" VARCHAR2(256 BYTE),
"ruleaccess" VARCHAR2(4000 BYTE),
"ruledisable" VARCHAR2(4000 BYTE),
"userssn" VARCHAR2(256 BYTE),
"departmentid" VARCHAR2(256 BYTE),
"active" CHAR(1 BYTE)
) SEGMENT CREATION IMMEDIATE
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
NOCOMPRESS LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "TESTTABLESPACE" ;
Run Code Online (Sandbox Code Playgroud)
小智 7
您使用双引号创建了列,因此现在 Oracle 要求您始终使用标识符并尊重大小写来引用此列。如果删除双引号,Oracle 总是将名称转换为大写,因此如果没有双引号,则不区分大小写。
如果您创建的列没有标识符,这将起作用:
where rulE_id
where RULE_ID
Run Code Online (Sandbox Code Playgroud)
同样在创建表时,不需要引号,除非您使用保留字。