Upload
votram
View
217
Download
0
Embed Size (px)
Citation preview
FUNCIONES EN MYSQL AUX INF-272
ESTRUCTURA
Ejercicio 1delimiter$$CREATE [DEFINER = { user | CURRENT_USER }]FUNCTION nombre ([func_parameter[,...]])RETURNS Tipo de datoLANGUAGE SQL| [NOT] DETERMINISTIC| { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }| SQL SECURITY { DEFINER | INVOKER }| COMMENT 'string'Begin…….Select..….Return…END;
FUNCION N1 Cuenta cuantos vuelos tomo un turistadelimiter $$//IMPORTANTECREATE FUNCTION cuentat2(xcodturista varchar(15))RETURNS INT READS SQL DATA BEGIN DECLARE total INT;
SELECT COUNT(*) INTO total FROM toma WHERE codturista=xcodturista;
RETURN(total);END;
EJECUTARSELECT codturista, cuentat2( codturista)FROM turista;
Ejercicio 2
Mostrar cuantos contratos tiene cada agencia
Solution
delimiter $$CREATE FUNCTION calcula (xcodsuc varchar(5)) RETURNS int(11)READS SQL DATABEGINDECLARE sol INT;SELECT COUNT(c.codsuc) INTO solFROM contrata cWHERE c.codsuc=xcodsucGROUP BY c.codsuc;RETURN(sol);END;
***********************************************************SELECT DISTINCT a.codsuc,ifnull(calcula(a.codsuc),0) Num_contratosFROM agencia a;
Ejercicio 3
Mostrar los vuelos que viajaron de “La Paz” a “Cochabamba”
Solucióndelimiter $$CREATE FUNCTION `vuelo_LP_Cbba`(xnumv varchar(5)) RETURNS booleanREADS SQL DATA
BEGINDECLARE sol INT;SELECT COUNT(v.numv) INTO solFROM vuelo vWHERE v.numv=xnumvAND v.origen = 'la paz'AND v.destino = 'cochabamaba';IF(sol >0)
THEN RETURN(true);ELSE RETURN(false);
END IF;END;
*************************************************SELECT DISTINCT v.numv, vuelo_LP_Cbba(v.numv)FROM vuelo v;
Ejercicio Propuesto Calcular el Pago Total (la suma de la cuenta de los hoteles en los que reservo) de
cada turista
Solución delimiter $$CREATE FUNCTION calcula_pago(xcodturista varchar(5))RETURNS double
READS SQL DATABEGIN DECLARE sol double;
SELECT sum((TO_DAYS(r.fecha_s)-TO_DAYS(r.fecha_e)) * h.precio_por_dia) into solFROM reserva r,hotel hwhere r.codhotel = h.codhoteland r.codturista=xcodturistagroup by r.codturista;
return(sol);END;PARA EJECUTARSelect t.codturista,calcula_pago(t.codturista Total_a_Pagar)From turista t;
Resultado