Sql 触发器未触发(编译成功)

Sql 触发器未触发(编译成功),sql,oracle,Sql,Oracle,我有这两张桌子 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 P

我有这两张桌子

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\u details
中插入一行时,相应的
Model\u 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;

可能是,
null
s导致了该问题。在更新中添加一个
合并

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

可能是
null
s导致了该问题。在更新中添加一个
合并

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

您的触发器无效,因为您犯了一个错误。该列为模式总计,而非模式总计

因此,
MODAL_TOTALS
列总是在
Car_Makers
中获得一个值,您可以添加a
notnull
约束,或者将默认值设置为0

MODAL_TOTALS INT not null, 


您的触发器无效,因为您犯了一个错误。该列为模式总计,而非模式总计

因此,
MODAL_TOTALS
列总是在
Car_Makers
中获得一个值,您可以添加a
notnull
约束,或者将默认值设置为0

MODAL_TOTALS INT not null, 


我想补充一点,试图保持这样的运行总量是有根本缺陷的。实际上,您所做的只是在主表中保留行数。一个基本规则是永远不要存储在运行时可以计算的内容。我可能要补充的是,像这样试图维护某种运行总计是有根本缺陷的。实际上,您所做的只是在主表中保留行数。一个基本规则是永远不要存储运行时可以计算的内容。