2015-01-02 26 views
2

我有關於觸發器的問題。 我在PostgreSQL的plpgSQL中創建了一個函數,但現在我需要在MySQL中執行此操作。我嘗試了幾乎所有的東西,但我不知道如何去做。有人知道該怎麼做,並幫助我嗎?從plpgSQL觸發到MySQL

這裏是在PLPGSQL代碼:

CREATE OR REPLACE FUNCTION provjera_rezultata() RETURNS TRIGGER AS $$ 
    DECLARE 
    neodigrane_utakmice INT; 

    BEGIN 
    SELECT COUNT(*) INTO neodigrane_utakmice 
    FROM utakmice AS u 
     JOIN momcadi AS m1 
      ON m1.momcad_ID = u.momcad_a 
     JOIN momcadi AS m2 
      ON m2.momcad_ID = u.momcad_b 
    WHERE rezultat IS NULL; 

    IF neodigrane_utakmice > 0 THEN 
     RAISE NOTICE 'Broj utakmica bez rezultata je %', neodigrane_utakmice; 
    END IF; 

    RETURN NEW; 
    END; 
$$ LANGUAGE plpgsql; 

另外,我不知道MySQL使用什麼和PostgreSQL 「RAISE NOTICE」。

我這樣做,但我得到的錯誤:(

DELIMITER $$ 

CREATE TRIGGER provjera_rezultata 
    AFTER INSERT ON utakmice FOR EACH ROW 
    DECLARE broj INTEGER; 

BEGIN 
    SELECT COUNT(*) INTO broj 
    FROM utakmice AS u 
     JOIN momcadi AS m1 
      ON m1.momcad_ID = u.momcad_a 
     JOIN momcadi AS m2 
      ON m2.momcad_ID = u.momcad_b 
    WHERE rezultat IS NULL; 

    IF broj > 0 THEN 
     SIGNAL SQLSTATE '45000' 
     SET MESSAGE_TEXT = 'Postoje utakmice bez konacnog rezultata!'; 
    END IF; 
END $$ 

回答

1

你的代碼的內部部分可以保持基本相同,它的作用。

觸發與CREATE TRIGGER創建。

MySQL中的通知被稱爲signals,你做

SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'An error occurred'; 
+0

我插入我的有問題的SQL代碼,但我得到的錯誤:( – Nikola