एक HANDLER
अपवादों को पकड़ने के लिए है।
कर्सर से पढ़ते समय, कर्सर के अंत से पहले पढ़ने पर एक NOT FOUND
फेंकता है अपवाद, NULL
. की अंतहीन धारा को वापस करने के बजाय , इसलिए आपको इस अपवाद को पकड़ना होगा।
DECLARE val1 INT DEFAULT NULL;
DECLARE done TINYINT DEFAULT FALSE;
DECLARE c1 CURSOR FOR SELECT id FROM t1;
-- when the NOT FOUND condition fires, "done" -- which defaults to FALSE -- will be set to true,
-- and since this is a CONTINUE handler, execution continues with the next statement.
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN c1;
my_loop:
LOOP
FETCH NEXT FROM c1 INTO val1;
IF done THEN -- this will be true when we are out of rows to read, so we go to the statement after END LOOP.
LEAVE my_loop;
ELSE
-- maybe do more stuff here
END IF;
END LOOP;
-- procedure continues here...
मेरे उदाहरण से आंशिक रूप से कॉपी किया गया यहां ।