我正在尝试使用MySQL触发器生成错误消息。下面是我的代码:
DELIMITER $$
CREATE TRIGGER `test_before_insert` BEFORE INSERT ON `Initial_Fees`
FOR EACH ROW
BEGIN
IF ((SELECT Activation from Portfolio WHERE idPortfolio = New.idPortfolio)=false) THEN
SIGNAL SQLSTATE '45000';
SET MESSAGE_TEXT := 'Disabled Thing';
END IF;
END$$
DELIMITER ;
但是这总是会产生错误。我不知道错误是什么,因为它没有对错误说任何东西,而只是“错误”。
对此有何建议?除此之外,有人说使用SIGNAL
存在问题,因为它可能取决于MySQL版本。有什么建议吗?
set message_text
子句是信号语法的一部分-它们之间不应有分号(;
)。另外,它使用=
运算符,而不是:=
:
DELIMITER $$
CREATE TRIGGER `test_before_insert` BEFORE INSERT ON `Initial_Fees`
FOR EACH ROW
BEGIN
IF ((SELECT Activation from Portfolio WHERE idPortfolio = New.idPortfolio)=false) THEN
SIGNAL SQLSTATE '45000' -- Note: no semicolon
SET MESSAGE_TEXT = 'Disabled Thing'; -- Note the = operator
END IF;
END$$
DELIMITER ;
PHPMyAdmin使您可以选择指定在SQL中使用的定界符。
我将$$
指定为定界符,而不是;
,但是Mysql在某些地方仍然期望;
。所以
CREATE TRIGGER trg_update_wp_posts BEFORE UPDATE ON wp_posts
FOR EACH ROW
IF (NEW.post_content LIKE '%<script%>%') THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Script not allowed in post';
END IF;
失败
但是
CREATE TRIGGER trg_update_wp_posts BEFORE UPDATE ON wp_posts
FOR EACH ROW
IF (NEW.post_content LIKE '%<script%>%') THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Script not allowed in post';
END IF$$
Works