我使用以下脚本在oracle中创建表
CREATE TABLE STAFF_LVL
(
STAFF_LEVEL NUMBER(1,0),
MANAGER VARCHAR2(10),
OPERATOR VARCHAR2(10),
ENGINEER VARCHAR2(10),
PRIMARY KEY (STAFF_LEVEL) ENABLE
);
但是,当我插入以下数据时,它不起作用,因为其中2行是相同的
BEGIN
insert into staff_lvl values (1,'N','N','Y');
insert into staff_lvl values (3,'N','Y','Y');
insert into staff_lvl values (7,'Y','Y','Y');
insert into staff_lvl values (3,'N','Y','Y');
END;
有谁知道如何解决这个问题?
答案 0 :(得分:1)
正如你所说的那样,这是一个单项目,你必须有STAFF_LEVEL
作为主键......
是否说STAFF_LEVEL
是PRLYARY KEY中的唯一列?
你可以用:
创建一个复合PKCREATE TABLE STAFF_LVL
(
STAFF_LEVEL NUMBER(1,0),
MANAGER VARCHAR2(10),
OPERATOR VARCHAR2(10),
ENGINEER VARCHAR2(10),
PRIMARY KEY (STAFF_LEVEL, MANAGER, OPERATOR, ENGINEER) ENABLE
);
从而允许您输入两个STAFF_LEVEL
值3,只要它们对其他列没有相同的值。
虽然你的数据仍然会引起问题。
你是否强制要求列?
您可以根据序列添加生成的PK列吗?
类似的东西:
CREATE TABLE STAFF_LVL
(
ID NUMBER,
STAFF_LEVEL NUMBER(1,0),
MANAGER VARCHAR2(10),
OPERATOR VARCHAR2(10),
ENGINEER VARCHAR2(10),
PRIMARY KEY (ID, STAFF_LEVEL) ENABLE
);
CREATE SEQUENCE id_seq
MINVALUE 1
MAXVALUE 999999999999999999999999999
START WITH 1
INCREMENT BY 1
CACHE 1;
insert into staff_lvl values (id_seq.nextval, 1,'N','N','Y');
insert into staff_lvl values (id_seq.nextval, 3,'N','Y','Y');
insert into staff_lvl values (id_seq.nextval, 7,'Y','Y','Y');
insert into staff_lvl values (id_seq.nextval, 3,'N','Y','Y');
基本上,PK HAS是独一无二的。
要厚颜无耻,如果要求列,数据(不是唯一的)和PK列,您可以创建表,主键并禁用PK。它满足了你的项目的标准(并且可怕地使用了数据库)但是允许非独特的数据,而“技术上”仍然在桌面上有PK(即使它被禁用)......
答案 1 :(得分:0)
您已将STAFF_LEVEL声明为主键。这意味着您已要求数据库确保表中的所有行都具有STAFF_LEVEL的唯一值。但是,您尝试插入两个具有相同级别的不同行。这就是阻止你插入它的原因。
STAFF_LEVEL看起来不应该是唯一的或作为主键。因此,删除主键,您就可以插入行。
(下次请提供确切的错误消息。)