不要1分钟,检查reorder是否有插入
时间: 2024-10-22 14:30:20 浏览: 13
理解了,如果你想在触发器中检查`reorder`表中是否已经有了对应商品在本次更新之前的记录,而不是仅仅基于时间窗口,你可以稍微调整触发器的条件部分。下面是修改后的示例:
```sql
CREATE TRIGGER reorder
AFTER UPDATE OF qty ON stock
REFERENCING NEW AS n
FOR EACH ROW MODE DB2SQL
WHEN (n.qty <= 5 AND NOT EXISTS (
SELECT 1 FROM reorder WHERE itemno = n.itemno AND timestamp = (
SELECT MAX(timestamp)
FROM reorder
WHERE itemno = n.itemno
)
))
BEGIN
INSERT INTO reorder (itemno, timestamp) VALUES (n.itemno, CURRENT_TIMESTAMP);
END
```
这个修改版的触发器会在`stock`表中`qty`字段更新后,检查`reorder`表中是否存在商品`n.itemno`的最新记录(即`timestamp`列的最大值)。如果不存在,则插入新的记录,避免了重复插入。现在,只有当商品库存少于等于5,并且`reorder`表中没有最近的一次记录时,才会插入新的记录。
相关问题
不需要判断最近5s,只要判断reorder中是否有该商品
明白了,你的意思是仅需检查"reorder"表中是否已经存在对应商品的记录,如果是刚更新的商品并且还没有记录,那么才插入新的记录。这可以通过在触发器中执行一个简单的查询来实现。以下是修改后的触发器示例:
```sql
CREATE OR REPLACE TRIGGER reorder_trigger
AFTER UPDATE OF qty ON stock
REFERENCING NEW AS n
FOR EACH ROW MODE DB2SQL
WHEN (n.qty < 5)
BEGIN
IF NOT EXISTS (SELECT 1 FROM reorder WHERE itemno = n.itemno) THEN
INSERT INTO reorder (itemno, updated_timestamp) VALUES (n.itemno, CURRENT_TIMESTAMP);
END IF;
END;
```
在这个版本中,我们省略了对时间戳的比较,直接检查`reorder`表中是否已有`itemno`为`n.itemno`的记录。如果不存在,就插入新的记录,记录字段除了`itemno`还有`updated_timestamp`,表示商品状态被更新的时间。这样就可以避免同一商品在同一时刻被重复插入了。
阅读全文