sql >> Base de Datos >  >> RDS >> Oracle

Ejemplos de cursores PLSQL:cursores explícitos, implícitos y de referencia

Un cursor actúa lógicamente como un puntero en un conjunto de resultados. Puede mover el cursor por el conjunto de resultados, procesando cada fila, hasta que determine que está al final del conjunto de resultados. Hay tres tipos de sintaxis asociados con los cursores:crear el cursor, recuperar con el cursor y cerrar el cursor. Además, hay una serie de atributos de un cursor que puede utilizar en sus comparaciones lógicas. Los siguientes son los tipos de cursores en Oracle:

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;/