По умолчанию вставляются все столбцы, поэтому
INSERT INTO OrderMenu VALUES(1234, 111, 2);
действительно:
INSERT INTO OrderMenu (orderid,pid,quantity,rowtotal)
VALUES(1234, 111, 2);
ORA-00947: not enough values.
Вы должны использовать:
INSERT INTO OrderMenu (orderid,pid,quantity) VALUES(1234, 111, 2);
Ваш триггер имеет ошибки: SET rowtotal = rowtotal+1;
<- точка с запятой. </p>
Использование AFTER
выдаст вам эту ошибку:
ORA-04091: table <schema>.ORDERMENU is mutating
Похоже, вы пытаетесь добавить 1 к текущему значению итого для любого ряда. Это значение будет 0 + 1 каждый раз, когда вы не укажете сумму строк. Тем не менее, он никогда не обновит вашу строку (используя BEFORE
):
CREATE TRIGGER orderMenuTrig BEFORE INSERT ON OrderMenu
FOR EACH ROW
DECLARE TrigOrderID NUMBER;
BEGIN
TrigOrderID := :new.orderid;
-- this SQL will always be empty (not update anything)
-- since there are NO rows with the orderid to be inserted
UPDATE OrderMenu
SET rowtotal = rowtotal+1
WHERE trigorderid = OrderMenu.orderid;
END;
/
Вы можете использовать это вместо:
CREATE OR REPLACE TRIGGER orderMenuTrig BEFORE INSERT ON OrderMenu
FOR EACH ROW
BEGIN
:new.rowtotal := coalesce(:new.rowtotal,0) + 1;
END;
/