Неявният курсор е този, създаден "автоматично" за вас от Oracle, когато изпълнявате заявка. По-лесно е да се кодира, но страда от
- неефективност (стандартът ANSI посочва, че трябва да извлича два пъти, за да провери дали има повече от един запис)
- уязвимост към грешки в данните (ако някога получите два реда, това поражда TOO_MANY_ROWS изключение)
Пример
SELECT col INTO var FROM table WHERE something;
Явен курсор е този, който създавате сами. Отнема повече код, но дава повече контрол – например можете просто да отворите-извлечете-затворите, ако искате само първия запис и не ви пука дали има други.
Пример
DECLARE
CURSOR cur IS SELECT col FROM table WHERE something;
BEGIN
OPEN cur;
FETCH cur INTO var;
CLOSE cur;
END;