Um cursor implícito é aquele criado "automaticamente" para você pelo Oracle quando você executa uma consulta. É mais simples de codificar, mas sofre de
- ineficiência (o padrão ANSI especifica que deve buscar duas vezes para verificar se há mais de um registro)
- vulnerabilidade a erros de dados (se você receber duas linhas, isso gera uma exceção TOO_MANY_ROWS)
Exemplo
SELECT col INTO var FROM table WHERE something;
Um cursor explícito é aquele que você mesmo cria. É preciso mais código, mas dá mais controle - por exemplo, você pode simplesmente abrir-buscar-fechar se quiser apenas o primeiro registro e não se importar se houver outros.
Exemplo
DECLARE
CURSOR cur IS SELECT col FROM table WHERE something;
BEGIN
OPEN cur;
FETCH cur INTO var;
CLOSE cur;
END;