我对触发器有疑问。 我在PostgreSQL的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 $$
答案 0 :(得分:1)
代码的内部部分可能与它基本相同。
使用CREATE TRIGGER
创建触发器。
MySQL中的通知称为signals。你做了
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'An error occurred';
答案 1 :(得分:0)
在MySQL中,您在begin-end内部声明变量。这段代码没有语法错误:
# 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 $$
我知道这则帖子很旧,但是我不知何故来到了这里,但它没有答案。对于将来的问题,此答案可能会有所帮助。