比较容易的方法是建立一个触发器和一个约束,
首先允许我根据通常的英文习惯把表名改一下:
inbound_t  进货数据表
outbound_t 出货数据表
return_t   客户退货数据表
stock_t    库存数据表1、对stock_t建立一个约束:
alter table stock_t add (constraint const_1 check (库存量 >= 0));2、对outbound_t建立一个触发器:
create trigger mytrigger1
before insert on outbound
for each row
begin
  update stock_t
    set 库存量 = 库存量 - :new.出货数量
  where 商品编号 = :new.商品编号;
end;当加入出库纪录的时候,触发器会尝试从库存表中减去相应的数量,这个操作会受到stock表中约束条件的约束,如果这个操作失败,那么添加纪录的操作自动失败。

解决方案 »

  1.   

    这个恐怕不是触发器可做到的事情,只能在前端程序控制,或用一过程代替插入语句做事.
    create procedure name_pro(p_out in number)
    as
    num number;
    begin
    select 库存量 into num from stock_t;
    if p_out<=num then
    insert into....
    else
    null;
    end if;
    end;
    /每次插入数据时,就调用该过程判断是否库存量是否大于库存表的库存量.
      

  2.   

    create trigger mytrigger1
    before insert on outbound
    for each row
    begin
      update stock_t
        set 库存量 = 库存量 - :new.出货数量
      where 商品编号 = :new.商品编号 and 库存量 >= :new.出货数量;
      if SQL%notfound then
        raise_application_error(-20000,'库存量不能小于零!');
      end if;
    end;