Um cursor pode ser explícito ou implícito e qualquer um dos tipos pode ser usado em um loop FOR. Existem realmente dois aspectos em sua pergunta.
Por que usar um loop FOR explícito do cursor sobre um loop FOR implícito do cursor?
- Use um loop FOR explícito do cursor quando a consulta for reutilizada, caso contrário, um cursor implícito é preferido.
Por que usar um loop com um FETCH em vez de um loop FOR que não possui um FETCH explícito?
- Use um FETCH dentro de um loop quando precisar coletar em massa ou quando precisar de SQL dinâmico.
Aqui estão algumas informações úteis da documentação.
Exemplo de cursor implícito FOR LOOP
BEGIN
FOR vItems IN (
SELECT last_name
FROM employees
WHERE manager_id > 120
ORDER BY last_name
)
LOOP
DBMS_OUTPUT.PUT_LINE ('Name = ' || vItems.last_name);
END LOOP;
END;
/
Exemplo de Cursor Explícito FOR LOOP
DECLARE
CURSOR c1 IS
SELECT last_name
FROM employees
WHERE manager_id > 120
ORDER BY last_name;
BEGIN
FOR vItems IN c1 LOOP
DBMS_OUTPUT.PUT_LINE ('Name = ' || vItems.last_name);
END LOOP;
END;
/
Cursor implícito
Um cursor implícito é um cursor de sessão que é construído e gerenciado por PL / SQL. O PL / SQL abre um cursor implícito toda vez que você executa uma instrução SELECT ou DML. Você não pode controlar um cursor implícito, mas pode obter informações de seus atributos.
Um cursor implícito fecha após a execução da instrução associada; no entanto, seus valores de atributo permanecem disponíveis até que outra instrução SELECT ou DML seja executada.
Os atributos implícitos do cursor são: SQL% ISOPEN, SQL% FOUND, SQL% NOTFOUND, SQL% ROWCOUNT, SQL% BULK_ROWCOUNT, SQL% BULK_EXCEPTIONS
Cursor explícito
Um cursor explícito é um cursor de sessão que você constrói e gerencia. Você deve declarar e definir um cursor explícito, atribuindo-lhe um nome e associando-o a uma consulta (normalmente, a consulta retorna várias linhas). Em seguida, você pode processar o conjunto de resultados da consulta de uma das seguintes maneiras:
Abra o cursor explícito (com a instrução OPEN), busque linhas do conjunto de resultados (com a instrução FETCH) e feche o cursor explícito (com a instrução CLOSE).
Use o cursor explícito em uma instrução FOR LOOP do cursor (consulte "Processamento do conjunto de resultados da consulta com instruções FOR LOOP do cursor").
Você não pode atribuir um valor a um cursor explícito, usá-lo em uma expressão ou como um parâmetro formal do subprograma ou variável de host. Você pode fazer essas coisas com uma variável de cursor (consulte "Variáveis do cursor").
Ao contrário de um cursor implícito, você pode fazer referência a um cursor explícito ou variável de cursor por seu nome. Portanto, um cursor explícito ou variável de cursor é chamado de cursor nomeado.
Instruções Cursor FOR LOOP
A instrução FOR LOOP do cursor permite executar uma instrução SELECT e, em seguida, percorrer imediatamente as linhas do conjunto de resultados. Esta declaração pode usar um cursor implícito ou explícito.
FOR
é apenas outra maneira de usar cursores. Consulte os documentos: docs.oracle.com/cd/E11882_01/appdev.112/e10472/… Enfim, o que htp.prn () faz?