sql >> Databasteknik >  >> RDS >> Mysql

Hur fungerar HANDLER FOR NOT FOUND och vad är det för användning?

En HANDLER är för att fånga undantag.

När du läser från en markör, läser du förbi slutet av markören visas en NOT FOUND undantag, snarare än att returnera en oändlig ström av NULL , så du måste fånga detta undantag.

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...

Kopierat delvis från mitt exempel här .




  1. Motsvarar Oracles externa tabeller i SQL Server

  2. Oracle infoga i tabell2 och ta sedan bort från tabell1, undantag om misslyckas

  3. MySQL SELECT n poster baserat på GROUP BY

  4. MySQL uppdatera uttalande för att lagra ranking positioner