【问题标题】:MySql Stored Procedure Loop Cursor - Syntax errorMySql 存储过程循环游标 - 语法错误
【发布时间】:2013-09-28 10:00:07
【问题描述】:

语法错误在哪里?

DECLARE irid INT DEFAULT 0;
DECLARE tmp_joinid INT DEFAULT 0;
DECLARE loopjoins_eof INT DEFAULT FALSE;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET loopjoins_eof = TRUE;
START TRANSACTION;

    SET irid = (SELECT id FROM `tables` WHERE `adapter_id`=_aid AND `view_id`=_vid AND `name`=_tname);
    IF irid IS NOT NULL THEN

        DECLARE cur0 CURSOR FOR SELECT `joins`.`id` FROM `joins` WHERE `table_left_id`=irid OR `table_right_id`=irid;
        OPEN cur0;
            loopjoins: LOOP
                FETCH cur0 INTO tmp_joinid;
                IF loopjoins_eof THEN
                    LEAVE loopjoins;
                END IF;
                -- Lösche Join-Columns
                DELETE FROM `join_columns` WHERE `join_id`=tmp_joinid;
            END LOOP loopjoins;
        CLOSE cur0;

    END IF;
COMMIT;
SELECT irid;

1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 12 行的“DECLARE cur0 CURSOR FOR SELECT joins.id FROM joins WHERE table_left_id=i”附近使用正确的语法

谢谢

【问题讨论】:

    标签: mysql stored-procedures


    【解决方案1】:

    更好的选择是避免使用光标,您可以将光标替换为类似

    DELETE FROM `join_columns`
    WHERE `join_id` in 
      (SELECT `id` 
      FROM `joins` 
      WHERE `table_left_id`=irid OR `table_right_id`=irid);
    

    【讨论】:

      【解决方案2】:

      来自manual

      游标声明必须出现在之前处理程序声明和变量和条件声明之后。

      【讨论】:

      • 但我需要为光标选择“id”。我该怎么做?
      • 所以?再读一遍句子。 “...在处理程序声明之前”
      • 这个似乎工作DECLARE loopjoins_eof INT DEFAULT FALSE; DECLARE tmp_joinid INT; DECLARE irid INT DEFAULT 0; DECLARE cur0 CURSOR FOR SELECT joins.id FROM joins WHERE table_left_id=irid OR table_right_id=irid; DECLARE CONTINUE HANDLER FOR NOT FOUND SET loopjoins_eof = TRUE; START TRANSACTION; 但我需要首先选择虹膜。请问有什么建议吗?
      • 我做到了,但是为什么我在声明 irid 后添加 SET irid = (SELECT id FROM tables WHERE adapter_id=_aid AND view_id=_vid AND name=_tname); 仍然会出现语法错误。
      • 好的。我现在明白了:)。谢谢
      猜你喜欢
      • 2020-12-27
      • 2018-05-20
      • 1970-01-01
      • 2017-01-14
      • 1970-01-01
      • 2012-04-12
      • 2014-07-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多