创建一个触发器,从另一个表的列中减去 1

Posted

技术标签:

【中文标题】创建一个触发器,从另一个表的列中减去 1【英文标题】:Create a trigger that subtracts 1 from a column in another table 【发布时间】:2021-06-01 19:23:17 【问题描述】:

我需要一个触发器,在称为数量表的列中减去 1,我已经研究了很多但我找不到解决方案(我知道这很简单),我有以下表格:

CREATE TABLE product 
(
    product_id number,
    price number,
    quantity number
)

CREATE TABLE sale 
(
    sale_id number,
    client_id number,
    product_id number
)

product表的数量列的值是从0开始的,假设我有50个产品的数量,我需要在有销售的时候这个产品的数量下降到49,你们可以吗?帮帮我?

【问题讨论】:

【参考方案1】:

看起来sale 表缺少关键信息:已售商品的数量(数量)。所以:

SQL> CREATE TABLE product (
  2    product_id number,
  3    price      number,
  4    quantity   number
  5  );

Table created.

SQL> CREATE TABLE sale (
  2   sale_id    number,
  3   client_id  number,
  4   product_id number,
  5   quantity   number           --> missing
  6  );

Table created.

触发器:

SQL> create or replace trigger trg_ai_sale
  2    after insert on sale
  3    for each row
  4  begin
  5    update product p set
  6      p.quantity = p.quantity - :new.quantity
  7      where p.product_id = :new.product_id;
  8  end;
  9  /

Trigger created.

测试:product = 1 的起始数量为 50:

SQL> insert into product (product_id, price, quantity) values (1, 100, 50);

1 row created.

让我们卖 1 件商品:

SQL> insert into sale (sale_id, client_id, product_id, quantity) values (1, 1, 1, 1);

1 row created.

数量现在是 49:

SQL> select * from product;

PRODUCT_ID      PRICE   QUANTITY
---------- ---------- ----------
         1        100         49

SQL>

【讨论】:

以上是关于创建一个触发器,从另一个表的列中减去 1的主要内容,如果未能解决你的问题,请参考以下文章

如何创建从另一列计算的列?

从另一个工作表的列中的工作表列中搜索每个值,如果找到,则将整行粘贴到输出中

我想创建触发器来更新基于多个字符串过滤器的列中插入或更新的值

如何创建触发器以将更改事件添加到审核日志表中

根据日期创建事件触发器

从另一个表创建触发器计算总计 = 数量 * 价格