Cursores explícitos
Los cursores explícitos son cursores que usted declara y usa.Cursores implícitos
PL/SQL le permite incluir instrucciones SQL, incluidas las instrucciones SELECT, como parte de su código sin declarar un cursor, que se denomina cursor implícito.Cursores de referencia
Un cursor hace referencia a un conjunto de resultados. REF CURSOR le permite pasar una referencia de cursor de una unidad de programa PL/SQL a otra. En otras palabras, le permite crear una variable que recibirá un cursor y habilitará el acceso a su conjunto de resultados, pero en este blog doy ejemplos solo para cursores explícitos e implícitos, daré ejemplos para cursores de referencia y Cursor dinámico en otro blog .Un ejemplo de Cursor explícito:DECLARE nemployeeid NUMBER; dstartdate FECHA; denddate FECHA; sjobid VARCHAR2 (20); -- declarar cursor CURSOR curjob ES SELECCIONAR employee_id, start_date, end_date, job_id FROM hr.job_history;COMENZAR ABIERTO curjob; LOOP FETCH curjob EN nemployeeid, dstartdate, denddate, sjobid; SALIR CUANDO curjob%NOFOUND; DBMS_OUTPUT.put_line( 'Empleado ' || nemployeeid || 'tenía trabajo' || sjobid || ' for ' || (fecha de finalización - fecha de inicio) || ' días.'); FIN DEL BUCLE; CLOSE curjob;END;/El mismo ejemplo se da a continuación para el cursor explícito pero con For Loop, los cursores de For Loop son más inteligentes ya que no es necesario declarar variables para obtener valores en ellas y no es necesario abrir o cerrar o verificar si el puntero está al final del cursor. Aquí está el ejemplo:DECLARE CURSOR curjob IS SELECT employee_id, start_date, end_date, job_id FROM hr.job_history; COMIENCE PARA jh_rec IN curjob LOOP DBMS_OUTPUT.put_line( ''Empleado ' || jh_rec.employee_id || ' tenía trabajo ' || jh_rec .job_id || ' para ' || ( jh_rec.end_date - jh_rec.start_date || ' días.')); END LOOP;END;/Un ejemplo de cursor implícito:DECLARE nempno NÚMERO; CURSOR curjob ES SELECCIONAR employee_id, start_date, end_date, job_id DESDE hr.job_history; COMENZAR -- debajo de la consulta sql es el tipo de Cursor implícito SELECCIONAR CUENTA (*) EN nempno DESDE hr.job_history; DBMS_OUTPUT.put_line ('Hay ' || nempno || ' registros de historial de empleados.'); FOR jh_rec IN curjob LOOP DBMS_OUTPUT.put_line( ''Empleado ' || jh_rec.employee_id || ' tenía trabajo ' || jh_rec.job_id || ' para ' || ( jh_rec.end_date - jh_rec.start_date || ' días.' )); FIN DEL BUCLE;FIN;/