UNIVERSIDAD DEL PACIFICO TECNOLOGIA EN INFORMATICA SEMINARIO DE ACTUALIZACION TALLER 1 PROCEDIMIENTOS ALMACENADOS RESPONDER: 1. Que diferencia existe en utilizar IN y OUT cuando declaramos los parámetros en los procedimientos? 2. Es verdadero o falso que un procedimiento debe estar asociado con una base de datos?. Justifique. 3. Que permisos debe tener un usuario para hacer procedimientos? 4. Se puede utilizar dentro de un procedimiento el comando USE? 5. Por qué es necesario utilizar el comando DELIMITER antes de hacer un procedimiento? CON BASE EN LA BASE DE DATOS EMPRESA DE LAS PRÁCTICAS ANTERIORES, REALICE LOS SIGUIENTES EJERCICIOS: 6. Hacer un procedimiento llamado CODIGO que reciba como parámetro el código del empleado y si este es mayor a 7500, aumentárselo una unidad. Por ejemplo si el código es 7580 queda 7581. DELIMITER $$ DROP PROCEDURE IF EXISTS `empresa`.`aum_cod`$$ CREATE DEFINER=`root`@`localhost` PROCEDURE `aum_cod`(in cod integer) BEGIN if cod >= 7500 then update empleado set codigo = cod+1 where codigo = cod; end if; END$$ DELIMITER ; 7. Hacer un procedimiento llamado AUMENTO que reciba como parámetro de entrada el cargo del empleado. Si el cargo es supervisor, aumentarle la comisión un 3%. DELIMITER $$ DROP PROCEDURE IF EXISTS `empresa`.`mas_comision`$$ CREATE PROCEDURE `empresa`.`mas_comision`(in v_cargo varchar(20)) BEGIN if v_cargo = "SUPERVISOR" then update empleado set comision=comision * 0.03 where cargo = v_cargo; End if; END$$ DELIMITER ; 8. Hacer un procedimiento llamado FECHA que almacene en una variable llamada MAYOR, la fecha de contratación del empleado mas antiguo. DELIMITER $$ DROP PROCEDURE IF EXISTS `empresa`.`fecha_ant`$$ CREATE PROCEDURE `empresa`.`fecha_ant`(out fecha date) BEGIN select f_ingreso into fecha from empleado where f_ingreso = (select min(f_ingreso) from empleado); END$$ DELIMITER ; call fecha_ant(@fecha); select @fecha; 9. Hacer un procedimiento llamado NOMI_VENTAS que almacene en una variable llamada MEDIA el valor promedio de la nomina de los empleados del departamento de ventas. DELIMITER $$ DROP PROCEDURE IF EXISTS `empresa`.`nomi_ventas`$$ CREATE PROCEDURE `empresa`.`nomi_ventas`(out media integer) BEGIN select avg(salario) into media from empleado where deptno = (select deptno from departamento where dname = "ventas"); END$$ DELIMITER ; call nomi_ventas(@media); select @media; 10. Con que comando puedo ver las sentencias que conforman el procedimiento AUMENTO Show create procedure aumento; 11. Borrar el procedimiento CODIGO. drop procedure código; CREAR UNA BASE DE DATOS LLAMADA ACADEMICO Y EN ELLA LAS SIGUIENTES TABLAS: NOTA: SE SUPONE QUE UN CURSO SE DICTA SOLO EN UNA JORNADA Y QUE UN ALUMNO SOLO PUEDE MATRICULAR UN CURSO. HACER LOS SIGUIENTES PROCEDIMIENTOS: 1. Calcular la edad de un alumno. Tome como parámetro de entrada el código del alumno. DELIMITER $$ DROP PROCEDURE IF EXISTS `academico`.`edad_alumno`$$ CREATE PROCEDURE `academico`.`edad_alumno`(in cod int(11), out edad int(11)) BEGIN select datediff(current_date,f_nacimiento)/360 into edad from alumnos where idalumno = cod; END$$ DELIMITER ; call edad_alumno(7,@edad); select @edad; 2. Mostrar los alumnos matriculados en cada curso. DELIMITER $$ DROP PROCEDURE IF EXISTS `academico`.`alumnosporcurso`$$ CREATE PROCEDURE `academico`.`alumnosporcurso`() BEGIN select alumnos.nombre, cursos.nombre from alumnos, cursos where curso = idcurso; END$$ DELIMITER ; 3. Calcular la cantidad de alumnos matriculados en cada curso DELIMITER $$ DROP PROCEDURE IF EXISTS `academico`.`cant_alumnosporcurso`$$ CREATE PROCEDURE `academico`.`cant_alumnosporcurso`() BEGIN select count(alumnos.nombre), cursos.nombre from alumnos, cursos where curso = idcurso group by cursos.nombre; END$$ DELIMITER ; 4. Pasando como parámetro el nombre del alumno y la fecha de nacimiento, insertar en una tabla llamada edades el nombre y la edad de ese alumno. DELIMITER $$ DROP PROCEDURE IF EXISTS `academico`.`tabla_edades`$$ CREATE PROCEDURE `academico`.`tabla_edades`(in nom varchar(30), in nacimiento date) BEGIN declare anos integer default 0; select datediff(current_date(),nacimiento)/360 into anos; insert into edades values ( nom,anos); END$$ DELIMITER ; 5. Calcular la cantidad de alumnos HOMBRES. DELIMITER $$ DROP PROCEDURE IF EXISTS `academico`.`cant_hombres`$$ CREATE PROCEDURE `academico`.`cant_hombres`(out hombres int) BEGIN select count(sexo) into hombres from alumnos where sexo = "M"; END$$ DELIMITER ; 6. 7. 8. Mostrar el nombre y cursos de los alumnos matriculados en la jornada nocturna. Mostrar la cantidad de cursos en la jornada diurna. Pasando como parámetro el código del curso mostrar cuantos alumnos están matriculados en el. DATOS TABLA CURSOS. +---------+--------------+----------------+ | idcurso | nombre | jornada | +---------+--------------+----------------+ | 100 | estadistica |D | | 200 | redes |D | | 300 | programación | N | | 400 | cocina |N | | 500 | jardineria |N | +---------+--------------+---------------+ DATOS TABLA ALUMNOS +-------------+-----------------------+-------------------+-----------------+-----------------+--------+--------+ | idalumno | nombre | f_nacimiento | telefono | direccion | sexo | curso | +-------------+------------------------+-------------------+-----------------+-----------------+--------+--------+ | 1 | Roberto molina | 1987-03-04 | 3123332232 | cra 4 2-22 | m | 100 | | 2 | Fernado Arce | 1989-02-14 | 3165453212 | cra 14 21-22 | m | 200 | | 3 | Martina Molano | 1990-06-13 | 3175453212 | cra 5 44-29 | f | 300 | | 4 | Ana Barcos | 1980-07-11 | 3115453212 | cra 9 4-29 | f | 300 | | 5 | Rosa Velez | 1980-07-11 | 3115453212 | cra 9 4-29 | f | 300 | | 6 | Humberto Torres | 1977-12-14 | 3165453212 | cra 14 21-22 | m | 500 | +--------------+-----------------------+-------------------+------------------+-----------------+-------+--------+