122 - Procedimientos almacenados (parámetros de entrada) |
Una empresa almacena los datos de sus empleados en una tabla llamada "empleados". 1- Eliminamos la tabla, si existe y la creamos: if object_id('empleados') is not null drop table empleados; create table empleados( documento char(8), nombre varchar(20), apellido varchar(20), sueldo decimal(6,2), cantidadhijos tinyint, seccion varchar(20), primary key(documento) ); 2- Ingrese algunos registros: insert into empleados values('22222222','Juan','Perez',300,2,'Contaduria'); insert into empleados values('22333333','Luis','Lopez',300,0,'Contaduria'); insert into empleados values ('22444444','Marta','Perez',500,1,'Sistemas'); insert into empleados values('22555555','Susana','Garcia',400,2,'Secretaria'); insert into empleados values('22666666','Jose Maria','Morales',400,3,'Secretaria'); 3- Elimine el procedimiento llamado "pa_empleados_sueldo" si existe: if object_id('pa_empleados_sueldo') is not null drop procedure pa_empleados_sueldo; 4- Cree un procedimiento almacenado llamado "pa_empleados_sueldo" que seleccione los nombres, apellidos y sueldos de los empleados que tengan un sueldo superior o igual al enviado como parámetro. 5- Ejecute el procedimiento creado anteriormente con distintos valores: exec pa_empleados_sueldo 400; exec pa_empleados_sueldo 500; 6- Ejecute el procedimiento almacenado "pa_empleados_sueldo" sin parámetros. Mensaje de error. 7- Elimine el procedimiento almacenado "pa_empleados_actualizar_sueldo" si existe: if object_id('pa_empleados_actualizar_sueldo') is not null drop procedure pa_empleados_actualizar_sueldo; 8- Cree un procedimiento almacenado llamado "pa_empleados_actualizar_sueldo" que actualice los sueldos iguales al enviado como primer parámetro con el valor enviado como segundo parámetro. 9- Ejecute el procedimiento creado anteriormente y verifique si se ha ejecutado correctamente: exec pa_empleados_actualizar_sueldo 300,350; select * from empleados; 10- Ejecute el procedimiento "pa_empleados_actualizar_sueldo" enviando un solo parámetro. Error. 11- Ejecute el procedimiento almacenado "pa_empleados_actualizar_sueldo" enviando en primer lugar el parámetro @sueldonuevo y en segundo lugar @sueldoanterior (parámetros por nombre). 12- Verifique el cambio: select * from empleados; 13- Elimine el procedimiento almacenado "pa_sueldototal", si existe: if object_id('pa_sueldototal') is not null drop procedure pa_sueldototal; 14- Cree un procedimiento llamado "pa_sueldototal" que reciba el documento de un empleado y muestre su nombre, apellido y el sueldo total (resultado de la suma del sueldo y salario por hijo, que es de $200 si el sueldo es menor a $500 y $100, si el sueldo es mayor o igual a $500). Coloque como valor por defecto para el parámetro el patrón "%". 15- Ejecute el procedimiento anterior enviando diferentes valores: exec pa_sueldototal '22333333'; exec pa_sueldototal '22444444'; exec pa_sueldototal '22666666'; 16- Ejecute el procedimiento sin enviar parámetro para que tome el valor por defecto. Muestra los 5 registros.Ver solución
if object_id('empleados') is not null drop table empleados; create table empleados( documento char(8), nombre varchar(20), apellido varchar(20), sueldo decimal(6,2), cantidadhijos tinyint, seccion varchar(20), primary key(documento) ); insert into empleados values('22222222','Juan','Perez',300,2,'Contaduria'); insert into empleados values('22333333','Luis','Lopez',300,0,'Contaduria'); insert into empleados values ('22444444','Marta','Perez',500,1,'Sistemas'); insert into empleados values('22555555','Susana','Garcia',400,2,'Secretaria'); insert into empleados values('22666666','Jose Maria','Morales',400,3,'Secretaria'); if object_id('pa_empleados_sueldo') is not null drop procedure pa_empleados_sueldo; create procedure pa_empleados_sueldo @sueldo decimal(6,2) as select nombre,apellido,sueldo from empleados where sueldo>=@sueldo; exec pa_empleados_sueldo 400; exec pa_empleados_sueldo 500; exec pa_empleados_sueldo; if object_id('pa_empleados_actualizar_sueldo') is not null drop procedure pa_empleados_actualizar_sueldo; create procedure pa_empleados_actualizar_sueldo @sueldoanterior decimal(6,2), @sueldonuevo decimal(6,2) as update empleados set sueldo=@sueldonuevo where sueldo=@sueldoanterior; exec pa_empleados_actualizar_sueldo 300,350; select * from empleados; exec pa_empleados_actualizar_sueldo 350; exec pa_empleados_actualizar_sueldo @sueldonuevo=400,@sueldoanterior=350; select * from empleados; if object_id('pa_sueldototal') is not null drop procedure pa_sueldototal; create procedure pa_sueldototal @documento varchar(8) = '%' as select nombre,apellido, sueldototal= case when sueldo<500 then sueldo+(cantidadhijos*200) when sueldo>=500 then sueldo+(cantidadhijos*100) end from empleados where documento like @documento; exec pa_sueldototal '22333333'; exec pa_sueldototal '22444444'; exec pa_sueldototal '22666666'; exec pa_sueldototal;