我有两个存储过程。第一个在我的语言表中获取语言代码。
CREATE PROCEDURE `updateCategoryNameAll` (
IN categorieNumber VARCHAR (10),
IN categoryName VARCHAR (128)
)
BEGIN
DECLARE break BOOLEAN DEFAULT FALSE;
DECLARE languageCode CHAR(5);
DECLARE languageCursor CURSOR FOR
SELECT `language_code` FROM `ps_lang` WHERE `active` = 1;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET break = TRUE;
DECLARE EXIT HANDLER FOR 1644 RESIGNAL;
OPEN languageCursor;
language_loop: LOOP
FETCH languageCursor INTO languageCode;
IF (break) THEN
LEAVE language_loop;
ELSE
CALL updateCategoryName(categorieNumber, categoryName, languageCode);
END IF;
END LOOP language_loop;
CLOSE languageCursor;
END//
第二个过程根据所选语言更新类别翻译。
这是我的问题。在主要程序中,当我获取语言时,一切都很好:
但是,当我尝试获取我想在嵌套存储过程中使用的语言时:
SELECT IFNULL(
( SELECT `id_category`
FROM `pc_import_category`
WHERE `source_category_number` = categorieNumber
LIMIT 1), 0
) AS id_category,
IFNULL(
( SELECT `id_lang`
FROM `ps_lang`
WHERE `language_code` = language_code
LIMIT 1), 0
) AS id_lang
INTO idCategory, idLang;
这是我在父过程中获取活动语言时的结果:
应该只有一种语言(美国英语),但它返回我的两种语言(具有良好的 id,但第二种语言代码应为“fr-ca”)。当我获取其他语言时,这就是我得到的。
在我的第二次迭代中(更新法语翻译),这是我得到的:
结果,我发现自己总是只更新我的英语语言(即 id 1)。
在 MySQL 中,表锁是否存在某种我不知道的限制?
谢谢
使用相同名称时要小心:
建议您在任何参数或局部
DECLAREd
变量之前加上_
.您可能可以将这两个过程组合到一个SQL语句中。