No es un bug, es una característica no documentada

lunes, 9 de marzo de 2015

Bases de datos. SQL programado (IV) - Ejercicios

9:30 Posted by Inazio , No comments
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 comentarios:

Publicar un comentario