oracle raise_application_error mysql,raise application error Trigger in MySQL DBMS

博客内容涉及在MySQL触发器中使用`raise_application_error`引发的问题,该错误是由于`raise_application_error`实际上是Oracle数据库的构造。文章提供了解决方案,即使用MySQL的`signal sqlstate`来替代,从而正确地抛出错误信息。
摘要由CSDN通过智能技术生成

I am dealing with triggers, and I want to add the raise application error, but my code indicates :

Error code 1064, SQL state 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(-20000,'Pay is below Texas minimum wage!');

END IF;

END' at line 9

and if I remove the part of raise application error, it works perfectly .

Trigger:

DELIMITER @@

DROP TRIGGER IF EXISTS gmtt.after_update_mcorr @@

CREATE TRIGGER gmtt.after_update_mcorr

AFTER UPDATE ON gmtt.mcorr

FOR EACH ROW

BEGIN

IF OLD.etat = '0' AND NEW.etat = '1' THEN

INSERT INTO historique(message, User, dateHisto) VALUES (CONCAT( 'a achevé la Maintenance ', OLD.codeMaint) , CURRENT_USER(), NOW());

ELSE

raise_application_error(-20000,'Pay is below Texas minimum wage!');

END IF;

END @@

DELIMITER ;

# Answer 1

4d350fd91e33782268f371d7edaa8a76.png

Your syntax appears to be MySQL. And yet, raise_application_error is an Oracle construct. You want signal, documented here:

DELIMITER @@

DROP TRIGGER IF EXISTS gmtt.after_update_mcorr @@

CREATE TRIGGER gmtt.after_update_mcorr

AFTER UPDATE ON gmtt.mcorr

FOR EACH ROW

BEGIN

IF OLD.etat = '0' AND NEW.etat = '1' THEN

INSERT INTO historique(message, User, dateHisto)

VALUES (CONCAT( 'a achevé la Maintenance ', OLD.codeMaint) , CURRENT_USER(), NOW());

ELSE

signal sqlstate '-20000' set message_text = 'Pay is below Texas minimum wage!';

END IF;

END @@

DELIMITER ;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值