CREATE TABLE employee
(
empno INT PRIMARY KEY,
ename VARCHAR(20) NOT NULL,
post VARCHAR (10) NOT NULL,
gender CHAR(1),
citizenshipno VARCHAR(10),
salary NUMERIC(10,6) DEFAULT 10000,
deptno INT,
CONSTRAINT ck_gender CHECK(gender IN('M','F')),
CONSTRAINT uc_citizenshipno UNIQUE(citizenshipno),
CONSTRAINT fk_department FOREIGN KEY(deptno) REFERENCE department(deptno)
)
它说缺少关键字......我需要帮助才能真正禁止某人
答案 0 :(得分:1)
存在多个问题:
首先 - 在创建外键约束时使用REFERENCES
而不是REFERENCE
。
第二个 - salary
被定义为numeric(10,6)
- 这为小数点左边的四位数留下了空间,因此默认值10000
不适合字段,因为它在小数点左边有五位数。我将此列的定义更改为numeric(11,6)
。
第三 - 使用VARCHAR2
代替VARCHAR
。 Oracle已经表示,在某些时候,他们会改变VARCHAR
的行为以符合ANSI定义,这意味着它的行为将发生变化。在此之前(可能会或可能不会发生)使用VARCHAR2
。
将以上所有内容合并在一起我们得到:
create table employee
(empno int primary key,
ename varchar2(20) not null,
post varchar2(10) not null,
gender char(1),
citizenshipno varchar2(10),
salary numeric(11,6) default 10000,
deptno int,
constraint ck_gender check(gender in('M','F')),
constraint uc_citizenshipno unique(citizenshipno),
constraint fk_department foreign key(deptno)
references department(deptno));
祝你好运。
答案 1 :(得分:0)
您的CREATE语句存在多个问题:
IS NOT NULL
应为 NOT NULL
REFERENCE
REFERENCE关键字错误,应为 REFERENCES
VARCHAR data type
更好地使用 VARCHAR2 。来自documentation,
VARCHAR数据类型与VARCHAR2数据类型同义。至 避免可能的行为更改,始终使用VARCHAR2数据类型 存储可变长度的字符串。
NUMERIC(10,6) DEFAULT 10000
指定的精度不正确。它将抛出:
ORA-01438:大于此指定精度的值 柱
因为,id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY en ALL PRIMARY NULL NULL NULL 12889 Using where; Using temporary; Using filesort
1 PRIMARY g ref id_ente id_ente 5 disasrl.en.ID 4 NULL
1 PRIMARY tg eq_ref PRIMARY PRIMARY 4 disasrl.g.tipo_gara 1 NULL
1 PRIMARY ad eq_ref PRIMARY,id PRIMARY 4 disasrl.g.opElab 1 Using index
1 PRIMARY ep eq_ref PRIMARY PRIMARY 4 disasrl.g.indirizzo_ente 1 Using index
1 PRIMARY ta eq_ref PRIMARY PRIMARY 4 disasrl.g.criterio_aggiudicazione 1 NULL
2 DEPENDENT SUBQUERY A ALL NULL NULL NULL NULL 152721 Using where; Using filesort
2 DEPENDENT SUBQUERY Cl eq_ref PRIMARY PRIMARY 4 disasrl.A.id_classifica 1 NULL
2 DEPENDENT SUBQUERY TIG eq_ref PRIMARY PRIMARY 4 disasrl.A.id_tipologia_gara 1 NULL
3 UNCACHEABLE SUBQUERY bootstrap_colors ALL NULL NULL NULL NULL 11 Using where; Using temporary; Using filesort
表示10是精度,6表示比例。因此,您可以在小数点前 4位数,而在(10,6)
中有 5位有效数字。
将其更改为:
10000