簡體   English   中英

MySql 存儲過程循環游標 - 語法錯誤

[英]MySql Stored Procedure Loop Cursor - Syntax error

語法錯誤在哪里?

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 服務器版本相對應的手冊,了解在 'DECLARE cur0 CURSOR FOR SELECT joins附近使用的正確語法。 id FROM 在第 12 行joins WHERE table_left_id =i'

謝謝

更好的選擇是避免光標,您可以用類似的東西替換光標

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

手冊

游標聲明必須出現處理程序聲明之前以及變量和條件聲明之后。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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