Я пишу процедуру для прохождения через различные сборщики насекомых, некоторые из которых разделены запятыми, например. «V. Shirey, L. Smith», из которого мне нужно создать новую строку для каждого отдельного сборщика. Моя процедура выглядит следующим образом:Ошибка MySQL 1442: не удается обновить таблицу, но таблица не указана?
DROP PROCEDURE IF EXISTS agent_reclamation;
DELIMITER //
CREATE PROCEDURE agent_reclamation (IN VerbatimName VARCHAR(170))
BEGIN
DECLARE verbatimNameHandler varchar(170);
DECLARE tempAgentName varchar(170);
SET verbatimNameHandler = VerbatimName;
WHILE LENGTH(verbatimNameHandler) > 0 DO -- while there's more stuff left
IF LOCATE(',', verbatimNameHandler) > 0 THEN -- and theres a comma to be found
SET tempAgentName = SUBSTRING(verbatimNameHandler,1,LOCATE(',',verbatimNameHandler) - 1); -- set the temp variable to everything from the first character to the first comma
ELSE
SET tempAgentName = verbatimNameHandler; -- set the name if there are no commas
SET verbatimNameHandler = ''; -- won't accept procedure without update --
END IF;
INSERT INTO agentReclamation SET tempAgentName = tempAgentName;
/* INSERT INTO agentReclamation(tempAgentName) VALUES (tempAgentName); */ -- insert the new names into the agentReclamation table
SET verbatimNameHandler = REPLACE(verbatimNameHandler, tempAgentName + ',', ''); -- won't accept procedure without update --
END WHILE;
END //
DELIMITER ;
SELECT agent_reclamation(VerbatimName) FROM tempAgent WHERE VerbatimName LIKE
'%,%';
Я получаю ошибку 1442 о том, не удается обновить таблицу «tempAgent» в хранимой функции/триггера, поскольку он используется в операторе, вызвавшей эту хранимую функцию/триггера. Я не вижу, где я поставил себя, чтобы обновить «tempAgent» в любом месте процедуры.
Любая помощь будет принята с благодарностью, я просто собираюсь писать свои собственные процедуры в настоящее время. Благодаря!
Нет ли триггера на таблице 'agentReclamation', что-то делает с таблицей' tempAgent'? –
@ j.kaspar похоже, что его единственная ссылка на таблицу «tempAgent» находится вне хранимого определения proc в любом случае. Вон, можете ли вы запустить аналогичную вставку вне хранимой процедуры? – Uueerdo
@Uueerdo, я запустил вставку за пределами процедуры - я на самом деле просто решил проблему. В результате мне потребовалось 2 процедуры: одна, в которой я определяю курсор и прохожу через каждую строку, вызывая процедуру agent_reclamation и процедуру agent_reclamation. Один из главных преступников здесь пытался вызвать процедуру в предложении select. –