【问题标题】:mysql stored procedure declaration throws error on executionmysql存储过程声明在执行时抛出错误
【发布时间】:2016-07-21 22:12:11
【问题描述】:

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

这是错误

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在 'DECLARE start_pos, end_pos INT; 附近使用的正确语法; SET start_pos = 1; SET end_pos = 在第 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 ;

【问题讨论】:

    标签: mysql stored-procedures explode temp-tables


    【解决方案1】:

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

    在 MS SQL 中,它们可以在任何地方;但这很烦人,因为它们没有块作用域,它们有过程作用域,所以你不能在独立的块中“重用”名称。

    【讨论】:

    • 因此我感到困惑。一段时间以来,我主要是一名 .net 程序员,但我跨越了多种语言,以免将自己归为一类。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2021-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-09
    • 2021-10-20
    • 2012-01-26
    • 1970-01-01
    相关资源
    最近更新 更多