CREATE TABLE指令中缺少括号

时间:2016-01-19 11:03:49

标签: oracle

CREATE TABLE MAJEST_PROD_2015(
  PRODUCT_ID CHAR(10) NOT NULL,
  DESCRIPTION_PROD CHAR(30),
  SEW_DATE DATE,
  HARVEST_DATE DATE,
  QUANTITY INT,
  PROD_RATING INT(1),
  PRIMARY KEY (PRODUCT_ID)
);

错误报告 -

  

SQL错误:ORA-00907:缺少右括号   00907. 00000 - “缺少右括号”   *原因:
  *操作:

2 个答案:

答案 0 :(得分:1)

Oracle不是MySQL所以没有INT(1)类型:

CREATE TABLE MAJEST_PROD_2015(
   PRODUCT_ID CHAR(10) NOT NULL,
   DESCRIPTION_PROD CHAR(30),
   SEW_DATE DATE,
   HARVEST_DATE DATE,
   QUANTITY INT,
   PROD_RATING INT,            -- here
   PRIMARY KEY (PRODUCT_ID) 
);

SqlFiddleDemo

如果您不需要常量字符串,请考虑使用VARCHAR2(30)

修改

  

但我需要这些值在1-5之间

所以添加检查约束:

CONSTRAINT chk_PROD_RATING CHECK (PROD_RATING BETWEEN 1 AND 5),

SqlFiddleDemo2

答案 1 :(得分:1)

由于already noted INT在Oracle中没有长度约束 - 相反,您可以使用NUMBER(1,0)将其限制为单个数字(-9 .. +9),然后您可以使用CHECK约束进一步限制它。

CHAR(n)也会使用空格(CHR(32))字符填充值,以便它始终包含最大字符数。如果您不打算这样做,那么您应该使用VARCHAR2(n)代替。

您对NOT NULL的列也不需要PRIMARY KEY约束。

CREATE TABLE MAJEST_PROD_2015(
  PRODUCT_ID       VARCHAR2(10)  CONSTRAINT MAJEST_PROD_2015__PROD_ID__PK PRIMARY KEY,
  DESCRIPTION_PROD VARCHAR2(30),
  SEW_DATE         DATE,
  HARVEST_DATE     DATE,
  QUANTITY         INT,
  PROD_RATING      NUMBER(1,0)   CONSTRAINT MAJEST_PROD_2015__PROD_RAT__CK CHECK ( PROD_RATING BETWEEN 1 AND 5 )
);

(也应该是SEW_DATESOW_DATE?由于下一行谈到收获,我会想到&#34;播种&#34;更贴切。)< / em>的