Práctica 1 de la hoja 5/6
1. Escribir un procedimiento que reciba dos
números y visualice su suma.
delimiter $$
drop procedure if exists uno $$
create procedure uno(in x integer, in y integer)
begin
select a+b;
end $$
delimiter ;
2. Codificar un
procedimiento que reciba una cadena y la visualice al revés.
delimiter $$
drop procedure if exists dos $$
create procedure dos (in cadena varchar(255))
begin
select reverse(cadena);
end $$
delimiter ;
3. Escribir un procedimiento
que reciba una fecha y visualice el año, en número, correspondiente a esa
fecha.
delimiter $$
drop procedure if exists tres $$
create procedure tres (in fecha date)
begin
select
year(fecha);
end $$
delimiter ;
4. Escribir un procedimiento
que haga uso del procedimiento anterior.
delimiter $$
drop procedure if exists cuatro $$
create procedure cuatro (in fecha date)
begin
select dayname(fecha), monthname(fecha),
tres(fecha);
end $$
delimiter ;
5. Desarrollar un procedimiento que visualice el
número de años completos que hay entre dos fechas que se pasan como argumentos.
delimiter $$
drop procedure if exists cinco $$
create procedure cinco (in fecha1 date, in fecha2
date)
begin
if fecha1
>= fecha2 then
select
year(fecha1)-year(fecha2);
else
select
year(fecha2)-year(fecha1);
end if;
end $$
delimiter ;
6. Escribir un procedimiento
que visualice los trienios completos que hay entre dos fechas.
delimiter $$
drop procedure if exists seis $$
create procedure seis (in fecha1 date, in fecha2 date)
begin
if fecha1
>= fecha2 then
select
(year(fecha1)-year(fecha2))/3;
else
select
(year(fecha2)-year(fecha1))/3;
end if;
end $$
delimiter ;
7. Escribir un procedimiento
que visualice solamente caracteres alfabéticos sustituyendo cualquier otro
carácter no alfabético por blancos a partir de una cadena que se pasará en la
llamada.
delimiter $$
drop procedure if exists sieteD $$
create procedure
sieteD(in cadena varchar(255), out oCadena varchar(255))
begin
declare letra int;
declare contador int;
set contador = 0;
bucleCadena: while contador <= length(cadena)
do
set letra = ascii(mid(cadena,1,1));
if (letra >= 65 and letra <=90)
|| (letra >= 97 and letra <= 122) then
if oCadena = null then -- Si
hago un concat valiendo nulo será nulo. Necesito darle un valor a la cadena
set oCadena = mid(cadena,contador,1);
else
set oCadena =
concat(oCadena,mid(cadena,contador,1));
end if;
else
if
oCadena = null then
set oCadena = ' ';
else
set oCadena =
concat(oCadena,' ');
end if;
end if;
set contador = contador+1; -- Incremento
en 1 el contador de caracteres
end while bucleCadena;
end $$
delimiter $$;
8. Implementar un
procedimiento que reciba un importe y visualice el desglose del cambio en
unidades monetarias de céntimos de €,
1€, 2€, 5€, 10€, 50€. Ej. 58.9 =
1 billete de 50€, 1 billete de 5 €, 3 monedas de 1€ y 90 céntimos de €
delimiter $$
drop procedure if exists ocho $$
create procedure
ocho(valor decimal(5,2))
begin
declare
unCent, dosCent, cincoCent, diezCent, veinteCent, cincuentaCent, unE, dosE,
cincoE, diezE, veinteE, cincuentaE integer;
set unCent =
0;
set dosCent
= 0;
set
cincoCent = 0;
set diezCent
= 0;
set
veinteCent = 0;
set
cincuentaCent = 0;
set unE = 0;
set dosE =
0;
set cincoE =
0;
set diezE =
0;
set veinteE
= 0;
set
cincuentaE = 0;
if valor
>= 50 then
set cincuentaE = valor / 50;
set valor = MOD(valor,50);
end if;
if valor
>= 20 then
set
veinteE = valor / 20;
set
valor = MOD(valor,20);
end if;
if valor
>= 10 then
set
diezE = valor / 10;
set
valor = MOD(valor,10);
end if;
if valor
>= 5 then
set
cincoE = valor / 5;
set
valor = MOD(valor,5);
end if;
if valor
>= 2 then
set dosE
= valor / 2;
set
valor = MOD(valor,2);
end if;
if valor
>= 1 then
set unE
= valor / 1;
set
valor = MOD(valor,2);
end if;
if valor
>= 0.50 then
set
cincuentaCent = valor / 0.50;
set
valor = MOD(valor,0.50);
end if;
if valor
>= 0.20 then
set
veinteCent = valor / 0.20;
set
valor = MOD(valor,0.20);
end if;
if valor
>= 0.10 then
set
diezCent = valor / 0.10;
set
valor = MOD(valor,0.10);
end if;
if valor
>= 0.05 then
set
cincoCent = valor / 0.05;
set
valor = MOD(valor,0.05);
end if;
if valor
>= 0.02 then
set
dosCent = valor / 0.02;
set
valor = MOD(valor,0.02);
end if;
if valor
>= 0.01 then
set
unCent = valor / 0.01;
set
valor = MOD(valor,0.01);
end if;
select unCent, dosCent, cincoCent, diezCent,
veinteCent, cincuentaCent, unE, dosE, cincoE, diezE, veinteE, cincuentaE;
end $$
delimiter ;
0 comments:
Publicar un comentario