mysql - 触发器从 plpgSQL 到 MySQL

标签 mysql postgresql triggers

我对触发器有疑问。 我已经在 plpgSQL 中为 PostgreSQL 创建了一个函数,但是,现在我需要在 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 $$

最佳答案

您的代码的内部部分可以基本保持不变。

触发器是用 CREATE TRIGGER 创建的.

通知在 MySQL 中称为 signals .你做

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

关于mysql - 触发器从 plpgSQL 到 MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27742475/

相关文章:

mysql - 文件大小为 0 字节(使用 Struts2 和 MySQL 下载文件应用程序)

postgresql - 使用 pg_trgm 在 3 亿个地址中搜索

php - 如何使用一个查询更新多行

mysql - 与数据库触发器相比,Hibernate 的拦截器效率如何?

postgresql - Postgres pg_trigger 的触发器类型字段(tgtype)中位的含义

mysql - 创建插入后触发器后无法插入表

php - mySQL - 匹配拉丁(英语)表单输入到 utf8(非英语)数据

Mysql查询非常慢,但是重启后工作很快(CPU使用率99%)

php - 从 MySQL 数据库中获取 5 个随机行

sql - SQL中的候选匹配