比较容易的方法是建立一个触发器和一个约束,
首先允许我根据通常的英文习惯把表名改一下:
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表中约束条件的约束,如果这个操作失败,那么添加纪录的操作自动失败。
首先允许我根据通常的英文习惯把表名改一下:
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表中约束条件的约束,如果这个操作失败,那么添加纪录的操作自动失败。
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;
/每次插入数据时,就调用该过程判断是否库存量是否大于库存表的库存量.
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;