В PostgreSQL для определения успешного выбора записи курсора используется специальная переменная FOUND. Кроме стандартных возможностей позволяется перемещаться по курсору командой MOVE без выбора данных. Во-вторых, выбор записи и перемещение можно делать не последовательно, а перепрыгивая через записи и в любом направлении. Ниже приведен аналогичный пример для PostgreSQL.
-- создание функцииCREATE OR REPLACE FUNCTION curdemo() RETURNS integer AS $$DECLARE val tblname%rowtype; -- курсор cur CURSOR IS select * from tblname; r integer:=0;BEGIN OPEN cur; loop FETCH cur INTO val; -- если записи нет EXIT WHEN not FOUND ; if mod(val.id,2)=0 then r:=r+1; end if; end loop; CLOSE cur; return r;END;$$ LANGUAGE plpgsql; -- проверкаselect curdemo();
MySQL
Ниже приведен аналогичный пример для MySQL.
-- создание функцииDELIMITER $$DROP FUNCTION IF EXISTS curdemoCREATE FUNCTION curdemo()RETURNS integerBEGINdeclare r integer default 0;declare val integer default 0;declare nodata boolean default false;-- курсорdeclare cur CURSOR FOR SELECT id FROM tblname;-- обработчик отсутствия следующей записи в курсореdeclare continue handler for not found set nodata=true; OPEN cur; -- открываем курсорl1:loop FETCH cur INTO val; -- если записи нет if nodata then close cur; -- закрываем курсор leave l1; -- выходим из цикла end if; if mod(val,2)=0 then set r:=r+1; end if;end loop l1; return r;END;$$DELIMITER; -- проверкаselect curdemo();