mysql存储过程声明在执行时抛出错误

时间:2016-07-21 22:12:11

标签: mysql stored-procedures explode temp-tables

我在尝试创建此存储过程时不断收到此错误。我试图编写一个拆分逗号分隔字符串的过程。类似于爆炸。我觉得我很接近。

这是错误

您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以便在DECLARE start_pos,end_pos INT附近使用正确的语法;     SET start_pos = 1;     SET end_pos = Locat'在第6行

我从SQL Server示例中复制了逻辑,并尽力将其转换为MySql语法。

这是从头到尾的整个过程。我希望训练有素的眼睛可以解释为什么我会收到错误。

DELIMITER $$

CREATE procedure split_string (in p_string_to_split VARCHAR(255),in p_delimiter CHAR(1) ) 
BEGIN    
    DROP TEMPORARY TABLE IF EXISTS split_channel_ids;
    CREATE TEMPORARY TABLE split_channel_ids (p_channel_id int);

    DECLARE start_pos, end_pos INT;
    SET start_pos = 1;
    SET end_pos = Locate(p_delimiter, p_string_to_split); 
    WHILE (start_pos < CHAR_LENGTH(p_string_to_split) + 1) DO
        IF (end_pos = 0) THEN
            SET end_pos = CHAR_LENGTH(p_string_to_split) + 1;
        END IF;
        --- INSERT split_channel_ids (p_channel_id)  
        --- VALUES(SUBSTRING(p_string_to_split, start_pos, end_pos - start_pos)) ;
        SET start_pos = end_pos + 1;
        SET end_pos = Locate(p_delimiter, p_string_to_split, start_pos);
    END WHILE; 
    -- select * from imob_users;
    select * from split_channel_ids;
END $$
DELIMITER ;

1 个答案:

答案 0 :(得分:1)

DECLARE语句(在MySQL中)必须位于其封闭的BEGIN...END块的开头。

在MS SQL中,它们可以在任何地方;但它很烦人,因为它们没有块范围,它们有程序范围,因此你不能在独立块中“重用”名称。