Niejawny kursor to taki, który jest tworzony „automatycznie” dla Ciebie przez Oracle podczas wykonywania zapytania. Jest prostszy w kodowaniu, ale cierpi na
- nieefektywność (norma ANSI określa, że musi być pobierana dwukrotnie, aby sprawdzić, czy istnieje więcej niż jeden rekord)
- podatność na błędy danych (jeśli kiedykolwiek otrzymasz dwa wiersze, pojawia się wyjątek TOO_MANY_ROWS)
Przykład
SELECT col INTO var FROM table WHERE something;
Kursor jawny to taki, który sam tworzysz. Zajmuje więcej kodu, ale daje większą kontrolę — na przykład możesz po prostu otworzyć-pobrać-zamknąć, jeśli chcesz tylko pierwszego rekordu i nie obchodzi cię, czy są inne.
Przykład
DECLARE
CURSOR cur IS SELECT col FROM table WHERE something;
BEGIN
OPEN cur;
FETCH cur INTO var;
CLOSE cur;
END;