0

テーブルから不足している ID を見つける手順を作成しますが、結果が取得されません。手順は次のとおりです。

DELIMITER ||
DROP PROCEDURE IF EXISTS proc_rpt ||
CREATE PROCEDURE proc_rpt()
BEGIN 
SET @minID = (SELECT MIN(`id`) FROM `tbl_film` WHERE `user_id`=13);
SET @maxID = (SELECT MAX(`id`) FROM `tbl_film` WHERE `user_id`=13);
REPEAT 
    SET @tableID = (SELECT `id` FROM `tbl_film` WHERE `id` = @minID);
    IF (@tableID IS NULL) THEN
        INSERT INTO temp_missing(`missing_id`) VALUES (@tableID);
    END IF;
    SET @minID = @minID + 1; 
UNTIL (@minID <= @maxID)
END REPEAT;  // earlier I was missing this line which was giving error in Procedure.
END; ||

それから私は上に電話します

CALL rpt_proc();

しかし、 tbl_missing には結果がありませんが、film_idinには多くの欠損値があることがわかりますtbl_film。誰かが私が間違っていることを教えてくれますか?

4

1 に答える 1

0

このコードを試してみてください。

DELIMITER ||
    DROP PROCEDURE IF EXISTS proc_rpt ||
    CREATE PROCEDURE proc_rpt()
    BEGIN 
    DECLARE maxId int;
    DECLARE minId int;
    DECLARE curId int;
        SELECT MIN(`id`) INTO maxId FROM `tbl_film` WHERE `user_id`=13;
        SELECT MAX(`id`) INTO minId FROM  `tbl_film` WHERE `user_id`=13;
    REPEAT 
        SELECT `id` INTO curId FROM `tbl_film` WHERE `id` = @minID);
        IF (curId IS NULL) THEN
            INSERT INTO temp_missing(`missing_id`) VALUES (curId);
        END IF;
        SET minId = minId + 1; 
    UNTIL (minId <= maxId)
    END REPEAT;  // earlier I was missing this line which was giving error in Procedure.
    END; ||
于 2013-03-26T08:43:15.090 に答える