我可以用DB2创建一个带有一组指令的触发器吗?

nom7f22z  于 2023-01-17  发布在  DB2
关注(0)|答案(1)|浏览(183)

我正在使用DB2,我必须创建一个触发器,在对“Disponibilita”进行特定更新后,该触发器必须对表“Promozioni”执行两个不同的操作,这里是模式:

create table PROMOZIONI (
     PID char(5) not null primary key,
     Valore DEC(4,2) not null,
     NumProdotti INT not null DEFAULT 0 );

create table DISPONIBILITA (
     CodProdotto char(5) not null,
     CodNegozio char(5) not null,
     Quantita INT not null,
     PID char(5) references PROMOZIONI,
     primary key (CodProdotto, CodNegozio));

这是一个明显不起作用的触发器:

Create or replace trigger AggiornaNumProdotti
After Update on Disponibilita 
referencing old as O new as N
for each row
update Promozioni p
SET NumProdotti=NumProdotti+1
Where N.PID is not null and N.PID=p.PID;
UPDATE Promozioni p2
SET NumProdotti=NumProdotti-1
WHERE O.PID is not null and O.PID=p2.PID;

有没有办法做一个单一的触发器或我被迫创建两个不同的每一个具体的指示?非常感谢

798qvoo8

798qvoo81#

对于多个查询,您需要BEGINEND

create table PROMOZIONI (
     PID char(5) not null primary key,
     Valore DEC(4,2) not null,
     NumProdotti INT not null DEFAULT 0 );
INSERT INTO PROMOZIONI VALUES ('1',1.2,0),
('2',1.2,0)
create table DISPONIBILITA (
     CodProdotto char(5) not null,
     CodNegozio char(5) not null,
     Quantita INT not null,
     PID char(5) references PROMOZIONI,
     primary key (CodProdotto, CodNegozio));
INSERT INTO DISPONIBILITA VALUES ('1','1',1,'1')
Create or replace trigger AggiornaNumProdotti
After Update on Disponibilita 
referencing old as O new as N
for each row
  BEGIN
update Promozioni p
SET NumProdotti=NumProdotti+1
Where N.PID is not null and N.PID=p.PID;
UPDATE Promozioni p2
SET NumProdotti=NumProdotti-1
WHERE O.PID is not null and O.PID=p2.PID;
END;
UPDATE  DISPONIBILITA SET PID = '2' WHERE PID = '1'
SELECT * FROM PROMOZIONI

| PID|价值|努姆普罗 Dotty |
| - ------|- ------|- ------|
| 1个|一点二十分|-1人|
| 第二章|一点二十分|1个|
fiddle

相关问题