Cursores SQL
Enviado por Sergio Matias Urquin • 4 de Julio de 2018 • Apuntes • 942 Palabras (4 Páginas) • 136 Visitas
CURSORES
En bases de datos, el término cursor se refiere a una estructura producto de una consulta que se utiliza para recorrer renglón por renglón y eventualmente dar algún procesamiento.
Un cursor se utiliza para el procesamiento individual de los renglones devueltos de una consulta por el Sistema Manejador de Base de Datos.
La creación y utilización de un cursor estará compuesta, como es de esperarse, por una serie de instrucciones, las cuales se separan en grupos bien diferenciados, los cuales son:
- Declaración del cursor - DECLARE
- Apertura del cursor - OPEN
- Acceso a datos del cursor – FETCH..INTO
- Cierre del cursor - CLOSE
- Desalojo de la memoria del cursor – DEALLOCATE
SINTAXIS GENERAL
-- Declaración del cursor
DECLARE <nombre_cursor> CURSOR
FOR
<sentencia_sql>
-- apertura del cursor
OPEN <nombre_cursor>
-- Acceso a los datos
-- Lectura de la primera fila del cursor
FETCH <nombre_cursor> INTO <lista_variables> WHILE (@@FETCH_STATUS = 0)
BEGIN
-- Lectura de la siguiente fila de un cursor
FETCH <nombre_cursor> INTO <lista_variables>
END -- Fin del bucle WHILE
-- Cierra el cursor
CLOSE <nombre_cursor>
-- Libera los recursos del cursor
DEALLOCATE <nombre_cursor>
-- Pasos previos para este ejemplo con la base de datos vista de control escolar
-- Declaración del cursor
DECLARE @BOL AS CHAR(10), @CVE_SEC AS CHAR(5), @CVE_MAT AS CHAR(4), @PRIMER AS INT, @SEGUNDO AS INT, @TERCER AS INT, @EXTRA AS INT, @PERIODO AS CHAR (20), @PROMEDIO AS INT, @FINAL AS INT
DECLARE CUR_EJ_1 CURSOR
FOR SELECT BOLETA, PASO_CAL_SEM.CVE_SECUENCIA, PASO_CAL_SEM.CVE_UAP, PRIMER_DEP, SEGUNDO_DEP, TERCER_DEP, EXTRAORDINARIO, CVE_PERIODO
FROM PASO_CAL_SEM INNER JOIN GRUPO
ON PASO_CAL_SEM.CVE_SECUENCIA = GRUPO.CVE_SECUENCIA AND PASO_CAL_SEM.CVE_UAP = GRUPO.CVE_UAP
-- apertura del cursor
OPEN CUR_EJ_1
-- Acceso a los datos
-- Lectura de la primera fila del cursor
FETCH NEXT FROM CUR_EJ_1 INTO @BOL, @CVE_SEC, @CVE_MAT , @PRIMER , @SEGUNDO , @TERCER , @EXTRA , @PERIODO
WHILE @@FETCH_STATUS=0
BEGIN
SET @PROMEDIO = (@PRIMER + @SEGUNDO + @TERCER) /3
IF @PROMEDIO >= @EXTRA
...