1
ここでトリガーを使用してテーブルCarBayのアドレスを変更すると、緯度をクリアしたかったのです。しかし、この表のすべての緯度を削除します。この問題を解決するにはどうすればよいですか?PosgreSQLはテーブルを更新するためにトリガーを使用します
あなたが定義によって古いアドレスを新しいアドレス(トリガーでAFTER UPDATE OF address
句)に更新されるので、あなたはすべてのアドレスを変更
OLD.address != NEW.address
フィルタリング
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();
OMG!あなたはNULLの後にセミコロンを入れます!更新ステートメントはそこで終了し、where節に移動していないし、..BOOM!すべてを更新し、緯度の列をNULLで破壊しました。そして私はここでロケット科学を考えていました。しかし、あなたのおかげで、私はトリガーのより良いグリップを得ました: - D –
ああ、それは間違いだった、私はすでにそれを削除しました。しかしそれはまだこの問題です。 –
BEFOREトリガーを試しましたか?私はどこかで読んでいたAFTERトリガーは通常ロギングに使用され、いくつかはAFTERトリガーのNEW節に関してキャッチされます。今思い出すことができません。だから投稿しなかった。試してみる。 –