· 4 years ago · May 12, 2021, 11:28 AM
1-- Cursores
2-- 1. Crear las tablas
3DROP TABLE IF EXISTS productos_precio_menor_que_50;
4CREATE TABLE productos_precio_menor_que_50 (
5 nombre VARCHAR(70),
6 precio_venta DECIMAL(15, 2)
7);
8
9DROP TABLE IF EXISTS productos_precio_mayor_que_50;
10CREATE TABLE productos_precio_mayor_que_50 (
11 nombre VARCHAR(70),
12 precio_venta DECIMAL(15, 2)
13);
14
15-- 2. Crear el cursor
16DELIMITER $$
17DROP PROCEDURE IF EXISTS test_de_cursores_con_loop$$
18CREATE PROCEDURE test_de_cursores_con_loop()
19BEGIN
20 -- Declaramos las variables locales que voy a necesitar para recorrer el cursor
21 DECLARE nombre_producto VARCHAR(70);
22 DECLARE precio_venta_producto DECIMAL(15, 2);
23
24 -- Variable local para detectar cuando finaliza el bucle
25 DECLARE salir BOOLEAN DEFAULT 0;
26
27 -- Declaracioń de un cursor
28 DECLARE cursor_productos CURSOR FOR SELECT nombre, precio_venta FROM producto;
29
30 -- Declaramos un manejador para detectar cuando nos quedamos sin filas en el cursor
31 DECLARE CONTINUE HANDLER FOR NOT FOUND SET salir = 1;
32
33 -- Abrimos el cursor
34 OPEN cursor_productos;
35
36 bucle: LOOP
37 -- Vamos recorriendo cada una de las filas del cursor
38 FETCH cursor_productos INTO nombre_producto, precio_venta_producto;
39 IF salir = 1 THEN
40 LEAVE bucle;
41 END IF;
42
43 -- Lógica del procedimiento
44 IF precio_venta_producto < 50 THEN
45 INSERT INTO productos_precio_menor_que_50 VALUES (nombre_producto, precio_venta_producto);
46 ELSE
47 INSERT INTO productos_precio_mayor_que_50 VALUES (nombre_producto, precio_venta_producto);
48 END IF;
49 END LOOP;
50
51 -- Cerramos el cursor
52 CLOSE cursor_productos;
53END
54$$
55
56-- 3. Probar el cursor
57DELIMITER ;
58CALL test_de_cursores_con_loop();
59
60SELECT *
61FROM productos_precio_mayor_que_50;
62
63SELECT *
64FROM productos_precio_menor_que_50;