CURSOR
Los cursores se utilizan para manejar las
sentencias SELECT. Un cursor está formado por un conjunto de
registros devueltos por una instrucción SQL del tipo SELECT.
Desde un punto de visto interno a la base de datos, los cursores son segmentos de memoria utilizados
para realizar operaciones con los registros devueltos tras ejecutar una
sentencia SELECT.
TIPOS DE CURSORES
Para procesar instrucciones SELECT que
devuelvan más de una fila, son necesarios cursores explicítos combinados con un estructura de
bloque.
Un cursor admite el uso de parámetros. Los parámetros deben declararse junto con el cursor.
El siguiente diagrama representa como se procesa una instrucción
SQL a través de un cursor.
Fases de un cursor
CURSORES
Los cursores permiten realizar operaciones sobre los registros devueltos por una sentencia Select. La utilización de cursores es necesaria cuando:
Se necesita tratamiento fila a fila
– En sentencias SELECT que devuelven más de una fila
• Operaciones con cursores
– Declare
• Se declara el cursor asignándole nombre y asociándole a
una consulta.
– Open
• Abre el cursor y lo inicializa para que devuelva las
filas.
• Ejecuta la consulta asociada al cursor.
– Fetch
• Lee los datos del cursor con la sentencia FETCH.
• Devuelve la siguiente fila en el conjunto activo.
• Los datos devueltos se almacenan en variables de control o
en un
registro. FETCH ... INTO ...
– Close
• Desactiva el cursor y libera los recursos. CLOSE cursor_1;
Ejemplo uso de cursor
DECLARE
CURSOR cursor_1 IS
SELECT nombre, número, salario
FROM emp
ORDER BY salario;
w_nombre emp.nombre%TYPE;
w_número emp.número%TYPE;
w_salar io
emp.salario%TYPE;
BEGIN
OPEN cursor_1;
FETCH cursor_1 INTO w_nombre, w_número, w_salario;
...
CLOSE cursor_1;
END;
Atributos del cursor
– Cada cursor definido tiene cuatro atributos a los que se
puede acceder para conocer el estado del cursor.
• %FOUND Devuelve true si el último FETCH evaluado
devuelve la siguiente fila.
• %NOTFOUND Devuelve true si el último FETCH evaluado
no devuelve ninguna fila.
• %ROWCOUNTContador inicialmente a cero, que se
incrementa en uno tras el FETCH de cada fila.
• %ISOPEN Devuelve true si el cursor especificado está
abierto
Ejemplo uso de
atributos del cursor
DECLARE
CURSOR cursor_1 IS
SELECT nombre, salario FROM empleados;
registro
cursor_1%ROWTYPE
BEGIN
IF NOT
(cursor_1%ISOPEN) THEN OPEN cursor_1;
ENDIF;
LOOP
FETCH
cursor_1 INTO registro;
EXIT WHEN
cursor_1%NOTFOUND;
...
END LOOP;
CLOSE cursor_1;
END;
Cursores implícitos
Se utilizan cuando la
sentencia SELECT devuelve un solo registro. En cada
cursor implicito debe existir palabra reservada INTO.
Las variables que reciben los datos devueltos por el cursor tienen
que contienen el mismo tipo de dato que las columnas de la tabla.
MySQL no soporta esta clase de cursores pero podemos visualizarlos
así.
Importante poner un delimitador nuevo, (suele ser ";")
ya que si no se cambia toma el punto y coma como delimitador, es decir que
sería el final del procedimiento o función (Línea 2).
El comando DECLARE (línea 5) sirve para declarar variables locales y cursores. Solo
funcionan dentro de procedimientos inmediatamente del BEGIN.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
DROP PROCEDURE IF EXISTS precioDolar; DELIMITER $$; CREATE PROCEDURE precioDolar( OUT fechas
DATE, OUT precioActual
DECIMAL(8,4) ) BEGIN DECLARE c CURSOR FOR SELECT fecha, precio FROM dolar WHERE fecha = (SELECT MAX(fecha) FROM dolar); SET precioActual = 0; OPEN c; FETCH c INTO fechas,
precioActual; CLOSE c; END$$ DELIMITER ; CALL precioDolar(@fecha,@precio); SELECT
@fecha, @precio; |
1
2
3
4
5
6
7
8
|
DECLARE fechas
dolar.fecha%TYPE ; precioActual
dolar.precio%TYPE; BEGIN SELECT
fecha, precio INTO fechas, precioActual FROM dolar WHERE fecha = (SELECT MAX(fecha) FROM dolar); dbms_output.put_line(fechas || ' ' || precioActual); END;
|
Casinos in Fort Myers, FL - Mapyro
ResponderEliminarGet 인천광역 출장샵 directions, 정읍 출장마사지 reviews and 동해 출장안마 information for Casinos in Fort Myers, FL. Casinos with 1,087 gaming 제주도 출장안마 machines, 안동 출장안마 33 table games and 107 live entertainment venues.