Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL触发器,光标返回错误1442或根本不起作用_Mysql_Sql - Fatal编程技术网

MySQL触发器,光标返回错误1442或根本不起作用

MySQL触发器,光标返回错误1442或根本不起作用,mysql,sql,Mysql,Sql,我目前正在使用数据库来处理ingame库存。 我在mySQL中编写了一个触发器,每次在表中插入一个新的项目时,都会尝试合并这些项目。每个项目有两个组成部分 我做错了一件事,但我看不出可能是什么。这是我的触发器: CREATE TRIGGER `onitempickup` AFTER INSERT ON `inventory` FOR EACH ROW BEGIN BEGIN DECLARE done boolean DEFAULT false; DECLARE Item2Combine V

我目前正在使用数据库来处理ingame库存。 我在mySQL中编写了一个触发器,每次在表中插入一个新的项目时,都会尝试合并这些项目。每个项目有两个组成部分

我做错了一件事,但我看不出可能是什么。这是我的触发器:

CREATE TRIGGER `onitempickup` AFTER INSERT ON 
`inventory` FOR EACH ROW BEGIN
BEGIN

DECLARE done boolean DEFAULT false;

DECLARE Item2Combine VARCHAR(10);

DECLARE MadefromResult1 VARCHAR(10);

DECLARE MadefromResult2 VARCHAR(10);

DECLARE ComboItemName1 VARCHAR(10);

DECLARE ComboItemName2 VARCHAR(10);

DECLARE in_itemname VARCHAR(10);


DECLARE Madefromcheck1Cursor cursor for 
SELECT name, madefrom1 FROM item WHERE madefrom2 = in_itemname;

DECLARE Madefromcheck2Cursor cursor for
SELECT name, madefrom2 FROM i``tem WHERE madefrom1 = in_itemname;

DECLARE ItemToCombineCursor cursor for 
SELECT Item from inventory;

DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

SET in_itemname = NEW.Item;


OPEN MadefromCheck1Cursor;
OPEN MadefromCheck2Cursor;
OPEN ItemToCombineCursor;

read_loop: LOOP

FETCH ItemToCombineCursor INTO Item2Combine;
FETCH Madefromcheck1Cursor INTO ComboItemName1, MadefromResult1;
FETCH MadefromCheck2Cursor INTO ComboItemName2, MadefromResult2;

IF done THEN
LEAVE read_loop;

ELSEIF Item2Combine = MadefromResult1 THEN 
INSERT INTO Inventory(Item) VALUES(ComboItemName1);
DELETE FROM Inventory WHERE Item = in_itemname;
DELETE FROM Inventory WHERE Item = Item2Combine;
LEAVE read_loop;

ELSEIF Item2Combine = MadefromResult2 THEN INSERT 
INTO Inventory(Item) VALUES(ComboItemName2);
DELETE FROM Inventory WHERE Item = in_itemname;
DELETE FROM Inventory WHERE Item = Item2Combine;
LEAVE read_loop;

ELSE
ITERATE read_loop;

END IF;

END LOOP read_loop;

CLOSE Madefromcheck1Cursor;
CLOSE Madefromcheck2Cursor;
CLOSE ItemToCombineCursor;

END
我尝试将其更改为在插入之前执行,但没有效果,因为该过程甚至没有执行。根据这里关于堆栈溢出的许多问题,我目前得到一个错误1442,这意味着我在某个地方有一个无限循环,但我不知道在哪里


谢谢你的帮助。感谢您的关注。

您正在处理表上的触发器-这将向该表中插入记录,这可能会导致触发;)哦,孩子。谢谢你的洞察力,在这方面花的时间比我想承认的要多。你把我弄松了!处理表上触发器的过程可能重复-将记录插入该表,这可能会导致触发;)哦,孩子。谢谢你的洞察力,在这方面花的时间比我想承认的要多。你把我弄松了!可能重复的