Un cursor puede ser explícito o implícito, y cualquier tipo puede usarse en un bucle FOR. Realmente hay dos aspectos para su pregunta.
¿Por qué usar un cursor FOR en bucle explícito sobre un cursor FOR en bucle implícito?
- Utilice un cursor FOR para el bucle explícito cuando se reutilice la consulta; de lo contrario, se prefiere un cursor implícito.
¿Por qué usar un bucle con un FETCH en lugar de un bucle FOR que no tiene un FETCH explícito?
- Use un FETCH dentro de un bucle cuando necesite recopilar en masa o cuando necesite SQL dinámico.
Aquí hay información útil de la documentación.
Ejemplo 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;
/
Ejemplo 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
Un cursor implícito es un cursor de sesión construido y administrado por PL / SQL. PL / SQL abre un cursor implícito cada vez que ejecuta una instrucción SELECT o DML. No puede controlar un cursor implícito, pero puede obtener información de sus atributos.
Un cursor implícito se cierra después de que se ejecuta su instrucción asociada; sin embargo, sus valores de atributo permanecen disponibles hasta que se ejecute otra instrucción SELECT o DML.
Los atributos implícitos del cursor son: SQL% ISOPEN, SQL% FOUND, SQL% NOTFOUND, SQL% ROWCOUNT, SQL% BULK_ROWCOUNT, SQL% BULK_EXCEPTIONS
Cursor explícito
Un cursor explícito es un cursor de sesión que construye y administra. Debe declarar y definir un cursor explícito, asignándole un nombre y asociándolo con una consulta (normalmente, la consulta devuelve varias filas). Luego puede procesar el conjunto de resultados de la consulta de cualquiera de estas formas:
Abra el cursor explícito (con la instrucción OPEN), obtenga filas del conjunto de resultados (con la instrucción FETCH) y cierre el cursor explícito (con la instrucción CLOSE).
Use el cursor explícito en una instrucción de cursor FOR LOOP (consulte "Procesamiento de conjuntos de resultados de consultas con cursor para declaraciones FOR LOOP").
No puede asignar un valor a un cursor explícito, usarlo en una expresión o usarlo como un parámetro de subprograma formal o variable de host. Puede hacer esas cosas con una variable de cursor (consulte "Variables de cursor").
A diferencia de un cursor implícito, puede hacer referencia a un cursor explícito o variable de cursor por su nombre. Por lo tanto, un cursor explícito o una variable de cursor se denomina cursor con nombre.
Cursor para declaraciones LOOP
La instrucción cursor FOR LOOP le permite ejecutar una instrucción SELECT e inmediatamente recorrer las filas del conjunto de resultados. Esta declaración puede usar un cursor implícito o explícito.
FOR
es solo otra forma de usar cursores. Consulte los documentos: docs.oracle.com/cd/E11882_01/appdev.112/e10472/… De todos modos, ¿qué hace htp.prn ()?