Un cursore implicito è uno creato "automaticamente" per te da Oracle quando esegui una query. È più semplice da codificare, ma soffre di
- inefficienza (lo standard ANSI specifica che deve essere recuperato due volte per verificare se è presente più di un record)
- vulnerabilità agli errori di dati (se si ottengono due righe, viene sollevata un'eccezione TOO_MANY_ROWS)
Esempio
SELECT col INTO var FROM table WHERE something;
Un cursore esplicito è quello che crei tu stesso. Richiede più codice, ma offre più controllo, ad esempio puoi semplicemente aprire-fetch-chiudere se vuoi solo il primo record e non ti interessa se ce ne sono altri.
Esempio
DECLARE
CURSOR cur IS SELECT col FROM table WHERE something;
BEGIN
OPEN cur;
FETCH cur INTO var;
CLOSE cur;
END;