Vista Subconsulta Cursores PDF
Vista Subconsulta Cursores PDF
Vista Subconsulta Cursores PDF
PROCEDIMIENTOS ALMACENADOS
Parámetros:
Como has visto, los parámetros se definen separados por una coma.
Los parámetros de los procedimientos almacenados de MySQL pueden
ser de tres tipos:
Ahora que hemos configurado una base de datos y una tabla, vamos
a crear tres procedimientos almacenados para mostrar el uso y las
diferencias de cada tipo de parámetro.
DELIMITER $$
CREATE PROCEDURE obtenerProductosPorEstado(IN nombre_estado
VARCHAR(255))
BEGIN
SELECT *
FROM productos
WHERE estado = nombre_estado;
END$$
DELIMITER
El nombre del estado está contenido en el parámetro nombre_estado
que hemos definido como IN. Suponiendo que quieras obtener los
productos con estado disponible, tendrías que invocar al
procedimiento de este modo:
CALL obtenerProductosPorEstado('disponible')
Cursores
Los cursores le permiten iterar los resultados de la consulta uno
por línea. DECLARE comando DECLARE se usa para iniciar el cursor
y asociarlo con una consulta SQL específica:
Nuestros datos:
);
CREATE TABLE product_type
(
name VARCHAR(50) NOT NULL PRIMARY KEY
);
CREATE TABLE product_type_count
(
type VARCHAR(50) NOT NULL PRIMARY KEY,
count INT(10) UNSIGNED NOT NULL DEFAULT 0
);
INSERT INTO product_type (name) VALUES
('dress'),
('food');
DELIMITER //
DROP PROCEDURE IF EXISTS product_count;
CREATE PROCEDURE product_count()
BEGIN
DECLARE p_type VARCHAR(255);
DECLARE p_count INT(10) UNSIGNED;
DECLARE done INT DEFAULT 0;
DECLARE product CURSOR FOR
SELECT
type,
COUNT(*)
FROM product
GROUP BY type;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
TRUNCATE product_type;
OPEN product;
REPEAT
FETCH product
INTO p_type, p_count;
IF NOT done
THEN
INSERT INTO product_type_count
SET
type = p_type,
count = p_count;
END IF;
UNTIL done
END REPEAT;
CLOSE product;
END //
DELIMITER;