1
我正在寫一個程序來循環通過各種昆蟲收集器,其中一些被逗號分開,例如。 「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表的唯一引用在存儲過程定義之外。 Vaughn,你能在存儲過程之外運行一個類似的插入嗎? – Uueerdo
@Uueerdo,我在程序之外運行插入罰款 - 我其實剛剛解決了這個問題。我最終需要2個過程:一個是我定義一個遊標並循環遍歷每一行,同時調用agent_reclamation過程和agent_reclamation過程本身。這裏的主要犯罪者之一是試圖在選擇聲明中調用一個程序。 –