taller 1 proc almacenados RESPUESTAS

Anuncio
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 |
+--------------+-----------------------+-------------------+------------------+-----------------+-------+--------+
Descargar