Sql 行不存在时更新触发器

Sql 行不存在时更新触发器,sql,oracle,plsql,triggers,oracle11g,Sql,Oracle,Plsql,Triggers,Oracle11g,我有两张桌子 订单项目: "ORDER_ITEMS_CODE" VARCHAR2(20) NOT NULL ENABLE, "ORDER_CODE" VARCHAR2(20) NOT NULL ENABLE, "ITEM_CODE_ORDERS" VARCHAR2(20) NOT NULL ENABLE, "ORDER_QUANTITY" NUMBER(4,0) NOT NULL ENABLE, "ORDER_UNIT" VARCHAR2(5) NOT NULL ENABLE, "UN

我有两张桌子 订单项目:

"ORDER_ITEMS_CODE" VARCHAR2(20) NOT NULL ENABLE, 
"ORDER_CODE" VARCHAR2(20) NOT NULL ENABLE, 
"ITEM_CODE_ORDERS" VARCHAR2(20) NOT NULL ENABLE, 
"ORDER_QUANTITY" NUMBER(4,0) NOT NULL ENABLE, 
"ORDER_UNIT" VARCHAR2(5) NOT NULL ENABLE, 
"UNIT_PRICE" NUMBER(38,5), 
"ORDERED_IN" VARCHAR2(6), 
"OR_QUANTITY_TON" NUMBER(38,5),
"Warehouse_CODE" VARCHAR2(20) NOT NULL ENABLE
另一个表是库存:

"INVENTORY_CODE" VARCHAR2(20) NOT NULL ENABLE, 
"ITEM_CODE" VARCHAR2(20) NOT NULL ENABLE, 
"WAREHOUSE_CODE" VARCHAR2(20),  
"IN_Q_TON" NUMBER(38,5), 
"OR_Q_TON" NUMBER(38,5) 
我创建了一个触发器来计算或_QUANTITY _TON=Sum或_QN _TON

create or replace trigger sum_Or_IT
after insert or update or delete on orderitems
begin
    update INVENTORY set OR_Q_TON = (
        select sum(or_quantity_ton) from orderitems 
        where
        orderitems.item_code_orders = INVENTORY.item_code
        and
        warehouse_code = '1');
end;
这是一个库存表,列或_Q__TON是每个项目的订购数量之和,但如果订单中不存在项目,我希望订单数量为零。 如果Orderitems表中不存在item\u code\u orders,那么OR\u Q\u TON=0,我想做一个例外

我试过了,但没用我得到了-不是0

EXCEPTION
  WHEN NO_DATA_FOUND THEN
    update INVENTORY set OR_Q_TON = 0 ;

its也不例外,在上述更新的情况下,oracle不会提出异议 您需要使用sql%rowcount

尝试:


您可以使用它而不是使用异常

IF SQL%NOTFOUND THEN 
    UPDATE inventory SET or_q_ton = 0 ;
    COMMIT;
END IF;
触发因素应该是

create or replace trigger sum_Or_IT
after insert or update or delete  on orderitems
begin
    update INVENTORY set OR_Q_TON = (
        select coalesce(sum(or_quantity_ton),0) from orderitems 
        where
        orderitems.item_code_orders = INVENTORY.item_code
        and
        warehouse_code = '1')        
end;

通过使用合并函数而不是异常解决了问题

触发器编译时没有错误,但我也得到了-而不是0可能是您遗漏了什么。请发布修改后的代码。在orderitems上插入、更新或删除后创建或替换触发器总和,开始更新库存集或从orderitems中选择数量,其中orderitems.item\u代码\u orders=INVENTORY.item\u代码和仓库\u代码='1';如果未找到SQL%,则更新库存集或\u q\u ton=0;犯罪如果结束;终止​测试了您的查询,运行正常。检查表orderitems和inventroy数据是否存在,werehouse_代码='1'。库存表中的仓库_代码=1,但在orderitems表中整行不存在,因此没有仓库_代码!我尝试了此操作,但没有得到0,,,,这是一个库存表,列或_Q___________________________________________。
create or replace trigger sum_Or_IT
after insert or update or delete  on orderitems
begin
    update INVENTORY set OR_Q_TON = (
        select coalesce(sum(or_quantity_ton),0) from orderitems 
        where
        orderitems.item_code_orders = INVENTORY.item_code
        and
        warehouse_code = '1')        
end;