Implicitní kurzor je takový, který pro vás Oracle „automaticky“ vytvoří, když spustíte dotaz. Je jednodušší kódovat, ale trpí
- neefektivita (norma ANSI určuje, že se musí načíst dvakrát, aby se zjistilo, zda existuje více než jeden záznam)
- zranitelnost vůči chybám dat (pokud se někdy objeví dva řádky, vyvolá to výjimku TOO_MANY_ROWS)
Příklad
SELECT col INTO var FROM table WHERE something;
Explicitní kurzor je takový, který si sami vytvoříte. Vyžaduje to více kódu, ale poskytuje větší kontrolu - například můžete jednoduše otevřít-načíst-zavřít, pokud chcete pouze první záznam a je vám jedno, jestli existují další.
Příklad
DECLARE
CURSOR cur IS SELECT col FROM table WHERE something;
BEGIN
OPEN cur;
FETCH cur INTO var;
CLOSE cur;
END;