Почему эта последовательность увеличивается на 2?
Я не могу понять, почему эта последовательность увеличивается на 2.
Есть ли ошибка в последовательности для увеличения на 1? Мне нужно это, чтобы вставить значение первичного ключа в таблицу "еда".
CREATE SEQUENCE food_id_ai START WITH 1 INCREMENT BY 1 CACHE 100;
create table food(
food_id integer,
f_name varchar(30) not null,
category varchar(30) not null,
price number(4),
amount number(4)
);
alter table food add constraint fpk primary key(food_id);
CREATE OR REPLACE TRIGGER insert_into_food
BEFORE INSERT ON food
FOR EACH ROW
BEGIN
:new.food_id:= food_id_ai.nextval;
END;
/
insert into food values(food_id_ai.nextval,'ruchi', 'chanachur' , 8, 50);
insert into food values(food_id_ai.nextval,'chips', 'chips' , 8, 50);
insert into food values(food_id_ai.nextval,'aeromatic', 'soap' , 8, 50);
insert into food values(food_id_ai.nextval,'handwash', 'toyletries', 8, 50);
insert into food values(food_id_ai.nextval,'tissue', 'toyletries' , 8, 50);
2 ответа
Потому что вы получаете доступ к последовательности как в вашем INSERT
оператор и в триггере, который запускается для каждой строки, конечно, он увеличивается на два.
Выбери один.
Я бы выбрал основанный на триггере, поскольку вам не нужно будет указывать последовательность в каждом операторе вставки, который вы можете выполнить.
В этом случае вам придется явно перечислить столбцы, которые вы собираетесь вставить VALUES
чтобы:
INSERT INTO food (f_name, category, price, amount)
VALUES ('ruchi', 'chanachur' , 8, 50);
У вас есть два варианта, чтобы исправить это.
измените оператор вставки, чтобы он был таким:
insert into food (f_name, category,price , amount) values ('ruchi', 'chanachur' , 8, 50);
или измените ваши триггеры следующим образом:
CREATE OR REPLACE TRIGGER insert_into_food BEFORE INSERT ON food FOR EACH ROW BEGIN if :new.food_id is null then :new.food_id:= food_id_ai.nextval; end if; END; /