簡體   English   中英

MySQL - #2014 - 當我在 PHPMyAdmin 中調用存儲過程時命令不同步

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM