![](/img/trans.png)
[英]MySQL - problem to call a stored procedure (#2014 : commands out of sync)
[英]MySQL - #2014 - Commands out of sync when I call stored procedure in PHPMyAdmin
晚上好,
這是我的存儲過程(編譯成功):
DELIMITER $$
CREATE OR REPLACE PROCEDURE GetStringOptionList (IN p_infoTypeCode VARCHAR(15), IN p_language VARCHAR(1))
BEGIN
DECLARE v_infotype_code VARCHAR(15);
DECLARE v_infotype_description VARCHAR(50);
DECLARE v_stringopt_code VARCHAR(15);
DECLARE v_stringopt_description VARCHAR(50);
DECLARE v_noMoreRow INTEGER;
DECLARE cur_stringOptions
CURSOR FOR
SELECT infoType.code as 'infoTypeCode',
case when p_language = 'F' then infoType.frenchDescription
when p_language = 'E' then infoType.englishDescription
else ''
end as 'InfoTypeDescription',
stringOpt.code as 'StringOptionCode',
case when p_language = 'F' then stringOpt.frenchDescription
when p_language = 'E' then stringOpt.englishDescription
else ''
end as 'StringOptionDescription'
FROM InfoType infoType
JOIN StringOptionValue stringOptVal ON infoType.code = p_infoTypeCode AND infoType.code = stringOptVal.codeInfoType
JOIN StringOption stringOpt ON stringOptVal.codeStringOption = stringOpt.code;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_noMoreRow = 0;
SET v_noMoreRow = 1;
OPEN cur_stringOptions;
LOOPROWS: LOOP
IF v_noMoreRow = 0 THEN
CLOSE cur_stringOptions;
LEAVE LOOPROWS;
END IF;
FETCH NEXT FROM cur_stringOptions INTO v_infotype_code, v_infotype_description, v_stringopt_code, v_stringopt_description;
SELECT v_infotype_code, v_infotype_description, v_stringopt_code, v_stringopt_description;
END LOOP;
END$$
DELIMITER ;
當我通過 PHPMyAdmin 在 MySQL 下編譯我的存儲過程時,沒問題。 但是當我這樣調用我的存儲過程時:
call GetStringOptionList('EYESCOLOR', 'F')
當我嘗試在 http://localhost... 上通過 PHPMyAdmin 執行存儲過程時出現以下錯誤:
Missing expression (near "ON" at position 25)
#2014 - Commands out of sync; you can't run this command now
我已經在控制台模式下嘗試過程序“mysql”。 當我執行“call GetStringOptionList("EYESCOLOR", "F")”時,我得到一個帶有箭頭“->”的空行。 我不知道這是什么意思。
為什么 ? 你有解決方案嗎 ?
我減少了別名的名稱長度並刪除了“OR REPLACE”(見下文),但我總是出現相同的錯誤:
DELIMITER $$
CREATE PROCEDURE GetStringOptionList (IN p_email VARCHAR(70), IN p_infoTypeCode VARCHAR(15), IN p_language VARCHAR(1))
BEGIN
DECLARE v_infotype_code VARCHAR(15);
DECLARE v_infotype_description VARCHAR(50);
DECLARE v_stringopt_code VARCHAR(15);
DECLARE v_stringopt_description VARCHAR(50);
DECLARE v_selected_code VARCHAR(15);
DECLARE v_nomore_row INTEGER;
DECLARE current_cursor
CURSOR FOR
SELECT it.code as 'itc',
uisov.codeStringOption as 'selected',
case when p_language = 'F' then it.frenchDescription
when p_language = 'E' then it.englishDescription
else ''
end as 'itdesc',
sopt.code as 'soc',
case when p_language = 'F' then sopt.frenchDescription
when p_language = 'E' then sopt.englishDescription
else ''
end as 'sodesc'
FROM InfoType it
INNER JOIN StringOptionValue sov
ON it.code = p_infoTypeCode AND it.code = sov.codeInfoType
INNER JOIN StringOption sopt
ON sov.codeStringOption = sopt.code
LEFT JOIN UserInfoStringOptionValue uisov
ON uisov.email = p_email AND sopt.code = uisov.codeInfoType;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_nomore_row = 0;
SET v_nomore_row = 1;
OPEN current_cursor;
LOOPROWS: LOOP
IF v_nomore_row = 0 THEN
CLOSE current_cursor;
LEAVE LOOPROWS;
END IF;
FETCH NEXT FROM current_cursor INTO v_infotype_code, v_selected_code, v_infotype_description, v_stringopt_code, v_stringopt_description;
SELECT v_infotype_code, v_selected_code, v_infotype_description, v_stringopt_code, v_stringopt_description;
END LOOP;
END$$
DELIMITER ;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.