日期:2014-05-17  浏览次数:20888 次

number类字段的where语句一直报错
在Oracle SQL Developer运行sql语句一直报错 ORA-00936:missing expression
select * from tpvframe_publication WHERE number=1;
是number类的给值有什么规范?

表结构如下:

CREATE TABLE "PLMWFLOW"."TPVFRAME_PUBLICATION" 
   ( "NUMBER" NUMBER NOT NULL ENABLE, 
"ISTOP" VARCHAR2(1 BYTE) NOT NULL ENABLE, 
"DUEDATE" DATE NOT NULL ENABLE, 
"SUBJECT" VARCHAR2(200 BYTE) NOT NULL ENABLE, 
"CONTENT1" VARCHAR2(4000 BYTE) NOT NULL ENABLE, 
"CONTENT2" VARCHAR2(4000 BYTE), 
"PUBLISHDATE" DATE NOT NULL ENABLE, 
 CONSTRAINT "TPVFRAME_PUBLICATION_PK" PRIMARY KEY ("NUMBER")
  USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS 
  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 "USERS"  ENABLE
   ) 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 "USERS" ;

------解决方案--------------------
用关键字做列名的隐患就在这里。就像你不会用SELECT,FROM,where做列名一样。
改为:
select * from tpvframe_publication WHERE "number"=1;

------解决方案--------------------
select * from tpvframe_publication WHERE "NUMBER"=1;

用关键字做字段名是很2的行为,Oracle里面用""标注字段名是更2的行为,因为它会掩盖第一种行为