[英]PostgreSQL use trigger to update table
当我在这里使用触发器修改表CarBay的地址时,我想清除纬度。 但它会删除此表中的所有纬度。 我该怎么做才能解决这个问题?
CREATE TABLE CarBay(
carBayName VARCHAR(20),
address VARCHAR(50) NOT NULL,
description VARCHAR(50),
latitude DECIMAL(8,5),
longitude DECIMAL(8,5),
PRIMARY KEY (carBayName)
);
CREATE FUNCTION changeBayName() RETURNS trigger AS $$
BEGIN
UPDATE CarBay
SET latitude = NULL
WHERE OLD.address != NEW.address;
RETURN NEW;
END
$$ LANGUAGE plpgsql;
CREATE TRIGGER changeBay AFTER UPDATE OF address ON CarBay
FOR EACH ROW
EXECUTE PROCEDURE changeBayName();
当您过滤OLD.address != NEW.address
您将更改所有地址,因为根据定义,旧地址将更新为新地址(触发器中的AFTER UPDATE OF address
子句)。 相反,您应该只清除表中地址等于NEW
地址的latitude
(可能是longitude
)。
CREATE FUNCTION changeBayName() RETURNS trigger AS $$
BEGIN
UPDATE CarBay
SET latitude = NULL, longitude = NULL
WHERE address = NEW.address;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.