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 - “缺少右括号” *原因:
*操作:
答案 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_DATE
或SOW_DATE
?由于下一行谈到收获,我会想到&#34;播种&#34;更贴切。)< / em>的