Триггер не срабатывает (успешно компилируется) - PullRequest
0 голосов
/ 29 марта 2019

У меня есть две таблицы

CREATE TABLE Car_Makers ( 
ID NUMBER(5), 
Maker VARCHAR2(15), 
FullName VARCHAR2(25), 
Country NUMBER(5),
MODAL_TOTALS INT, 
CONSTRAINT car_maker_country_id_fk FOREIGN KEY(Country) REFERENCES 
 Countries(CountryID), 
CONSTRAINT car_maker_id PRIMARY KEY(ID) 
 );

CREATE TABLE Model_Details ( 
ModelID NUMBER(5), 
Maker NUMBER(5), 
Model VARCHAR2(25), 
CONSTRAINT model_unique UNIQUE(Model), 
CONSTRAINT model_details_id_pk PRIMARY KEY(ModelID), 
CONSTRAINT model_maker_fk FOREIGN KEY(Maker) REFERENCES Car_Makers(ID) 
);

Я хочу создать триггер, который будет обновлять MODEL_TOTALS IN Car_Makers КОГДА новая строка вставляется в Model_Details.Однако мой триггер работает успешно, но не стреляет.Я не получаю никакой ошибки, но когда я вставляю строку в Model_details, соответствующее значение MODEL_TOTAL не обновляется.Любая помощь будет оценена, вот мой триггер

   CREATE OR REPLACE TRIGGER trg_modeltotals_up 
   AFTER INSERT ON MODEL_DETAILS
   REFERENCING NEW AS NEWROW
   FOR EACH ROW
   BEGIN
   UPDATE CAR_MAKERS SET MODEL_TOTALS = MODEL_TOTALS+1 WHERE 
   CAR_MAKERS."ID" = :NEWROW.MAKER;
    END;

Ответы [ 2 ]

1 голос
/ 29 марта 2019

Ваш триггер недействителен, потому что вы допустили ошибку. Столбец MODAL _TOTALS, а не MODEL _TOTALS

Чтобы столбец MODAL_TOTALS всегда получал значение в Car_Makers, вы можете добавить ограничение not null или, возможно, установить значение по умолчанию 0

MODAL_TOTALS INT not null, 

или

MODAL_TOTALS INT Default 0, 
1 голос
/ 29 марта 2019

Возможно, null s вызывают проблему.Добавьте coalesce в свое обновление

UPDATE CAR_MAKERS SET MODAL_TOTALS = COALESCE(MODAL_TOTALS,0) +1 WHERE 
   CAR_MAKERS."ID" = :NEWROW.MAKER;

DEMO

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...