【发布时间】:2014-04-26 12:24:20
【问题描述】:
大家好,我需要你的帮助:D 我正在使用最新版本的 PostgreSQL 首先,这是我的数据库表:
CREATE TABLE colore (
idcolore INTEGER PRIMARY KEY,
nome VARCHAR(100),
note TEXT
);
CREATE TABLE Prodotto (
SKU varchar(50) PRIMARY KEY,
nome varchar(255) NOT NULL,
quantita INTEGER DEFAULT -1,
idColore INTEGER,
prezzo NUMERIC(10, 2),
FOREIGN KEY(idColore) REFERENCES Colore(idColore) ON UPDATE NO ACTION ON DELETE NO ACTION
);
CREATE TABLE Ordine (
idOrdine INTEGER PRIMARY KEY,
SKU varchar(50) NOT NULL,
quantita INTEGER NOT NULL,
CHECK (check_quantita(SKU, quantita)),
FOREIGN KEY(SKU) REFERENCES Prodotto(SKU) ON UPDATE NO ACTION ON DELETE NO ACTION
);
我想要的是,当我插入一个新的 Ordine 时,按 SKU 列出的 Prodotto 引用的数量是可用数量减去订购的数量。
例如:
我有这个产品:
SKU : AAA
Nome: Prodotto1
Quantita: 11
然后我执行以下操作: INSERT INTO Ordine (idOrdine, SKU, quantita) VALUES (1, 'AAA', 10);
我想要的是,在最后一次插入之后,产品 AAA 的数量将为 1。
我试过使用这段代码
CREATE OR REPLACE FUNCTION aggiorna_quantita() RETURNS trigger AS
$$
BEGIN
UPDATE Prodotto
SET quantita = (SELECT Quantita FROM Prodotto WHERE SKU = TG_ARGV[0]) - TV_ARGV[$1]
WHERE SKU = TV_ARGV[$0] ;
END
$$
LANGUAGE plpgsql;
CREATE TRIGGER trigger_aggiorna_quantita
AFTER INSERT ON Ordine
FOR EACH STATEMENT
EXECUTE PROCEDURE aggiorna_quantita(SKU, quantita);
但是什么也没发生 :(
提前谢谢你,原谅我的英语不好:D
【问题讨论】:
标签: sql database postgresql triggers plpgsql