我在 Ubuntu 上使用 Mariadb (10.5.12-MariaDB-1build1)。
我在表上创建了一个插入触发器;使用联合语句检查以前的记录。它在以前的版本(10.3.31-MariaDB-0ubuntu.20.04.1)中工作正常,但在这个版本中抛出错误
我已经简化了陈述
SET @ID = '';
工会在几张桌子上,但我把它减少到两个
SELECT id FROM table1
union
SELECT id
INTO @ID
FROM table2;
给我这个错误
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'FROM table2 at line 'line number'
显然,如果我评论 INTO 子句,那很好。
所以我想问题出在INTO。我想更具体地说是进入的位置。因为单个 select 语句没有给出任何错误。
我将检查文档以了解我做错了什么。
@Barmar 这是实际的代码
DELIMITER ;;
/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER CRPInsertTrigger
BEFORE INSERT ON CRP
FOR EACH ROW
BEGIN
SET @msg = '';
SET @tire = @ID = @Name = '';
SELECT 'coMem' `tire`, coMemID `ID`, coMemName `Name` FROM coMem
WHERE institute = NEW.institute and registration = NEW.registration and bookNo = NEW.bookNo
union
SELECT 'commercialMem' `tire`, commercialMemID `ID`, commercialMemName `Name` FROM commercialMem
WHERE institute = NEW.institute and registration = NEW.registration and bookNo = NEW.bookNo
union
SELECT 'communityGeneralMem' `tire`, communityGeneralMemID `ID`, communityGeneralMemName `Name` FROM communityGeneralMem
WHERE institute = NEW.institute and registration = NEW.registration and bookNo = NEW.bookNo
union
SELECT 'CRP' `tire`, CRPID `ID`, CRPName `Name` FROM CRP
WHERE institute = NEW.institute and registration = NEW.registration and bookNo = NEW.bookNo
union
SELECT 'lsoMem' `tire`, lsoMemID `ID`, lsoMemName `Name` FROM lsoMem
WHERE institute = NEW.institute and registration = NEW.registration and bookNo = NEW.bookNo
union
SELECT 'voMem' `tire`, voMemID `ID`, voMemName `Name`
INTO @tire, @ID, @Name FROM voMem
WHERE institute = NEW.institute and registration = NEW.registration and bookNo = NEW.bookNo;
IF @Name != '' THEN
SET @msg = CONCAT('Error: Duplicate in registration found: ', CAST(NEW.registration AS CHAR CHARACTER SET utf8) COLLATE utf8_bin);
SET @msg = CONCAT(@msg, '(', @tire, 'ID:',CAST(@ID AS CHAR CHARACTER SET utf8) COLLATE utf8_bin);
SET @msg = CONCAT(@msg, ', Name:', CAST(@Name AS CHAR CHARACTER SET utf8) COLLATE utf8_bin, ')');
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = @msg;
END IF;
END */;;
DELIMITER ;