2011-01-21 18 views
0

他の列の値に基づいて1つの列の値を計算するトリガーを作成する必要があります。データベースは、より高いパフォーマンスを得るために少し非正規化されています。 (正規化はこの問題の問題ではない)。MySqlトリガーは計算されません

問題は、computed_address値の値を設定したいのですが、定数を入れても問題ありません。しかし、これらのIf節は機能していないようで、私は問題を見ることができません。

以下はトリガーコードです。 ありがとうございます!あなたのトリガコード

END; 
$$ 

DELIMITER ; 

の下部に

DELIMITER $$ 

USE `nth_poi_new_3`$$ 

DROP TRIGGER /*!50032 IF EXISTS */ `poi_address_creator`$$ 

CREATE 
    /*!50017 DEFINER = 'root'@'localhost' */ 
    TRIGGER `poi_address_creator` BEFORE INSERT ON `poi` 
    FOR EACH ROW BEGIN 
    DECLARE full_address VARCHAR(255); 
    DECLARE country_string VARCHAR(100); 
    DECLARE region_string VARCHAR(100); 
    DECLARE town_string VARCHAR(100); 
    DECLARE address_string VARCHAR(100); 

    IF NEW.address <> '' THEN 
     SET full_address = CONCAT(NEW.address, ","); 

    END IF; 
    IF NEW.town_name IS NOT NULL THEN 
     SET full_address = CONCAT(full_address, NEW.town_name, ","); 
    ELSEIF NEW.town_id IS NOT NULL THEN 
     SELECT NAME INTO town_string FROM town WHERE town.town_id = NEW.town_id LIMIT 1; 
     SET full_address = CONCAT(full_address, town_string, ","); 
    END IF; 

    IF NEW.region_name IS NOT NULL THEN 
     SET full_address = CONCAT(full_address, NEW.region_name, ","); 
    ELSEIF NEW.region_id IS NOT NULL THEN 
     SELECT NAME INTO region_string FROM region WHERE region.region_id = NEW.region_id LIMIT 1; 
     SET full_address = CONCAT(full_address, region_string, ","); 
    END IF; 

    IF NEW.country_name IS NOT NULL THEN 
     SET full_address = CONCAT(full_address, NEW.country_name, ","); 
    ELSEIF NEW.country_id IS NOT NULL THEN 
     SELECT NAME INTO country_string FROM country WHERE country.country_id = NEW.country_id LIMIT 1; 
     SET full_address = CONCAT(full_address, country_string, ","); 
    END IF; 

    SET NEW.computed_address = full_address; 

    END; 
$$ 

DELIMITER ; 
+0

DECLARE full_address VARCHAR(255); 

しかし、宣言の後に、それはまた、初期化する必要がありました。私はこれを作りました。 – ijw

答えて

1

ねえ、 だけで回答する必要があります。最初にfull_address変数を初期化しなければなりませんでした。あなたのコードの書式はいくつかの愛を必要とする

SET full_address=""; 
1

END$$ 

DELIMITER ; 
+0

そのように自動的に生成されました。私は問題がヌルをチェックすることにあると思う。構文は良いです。 – gljivar

関連する問題