Reputation: 172
I have question about triggers. I've created a function in plpgSQL for PostgreSQL, but, now I need to do this in MySQL. I tried almost everything and I don't know how to to this. Does anybody knows what to do and help me?
Here is the code in in 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;
Also, I don't know what to use in MySQL for "RAISE NOTICE" from PostgreSQL.
I did this, but I get error :(
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 $$
Upvotes: 2
Views: 1204
Reputation: 56
In MySQL you declare variables inside the begin-end. This code gives me no syntax error:
# test tables
CREATE TABLE utakmice(
momcad_a INT,
momcad_b INT,
rezultat INT,
PRIMARY KEY (momcad_a, momcad_b)
);
CREATE TABLE momcadi(
momcad_ID INT AUTO_INCREMENT PRIMARY KEY
);
DELIMITER $$
CREATE TRIGGER provjera_rezultata
AFTER INSERT ON utakmice FOR EACH ROW
BEGIN
DECLARE broj INTEGER;
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 $$
I know this post is old but I somehow came here and it was missing an answer. For future problems this answer can be helpful.
Upvotes: 0
Reputation: 40021
The inner parts of your code could remain basically the same as it does.
Triggers are created with CREATE TRIGGER
.
Notices in MySQL are called signals. You do
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'An error occurred';
Upvotes: 1