1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
/* Ejercicio 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 1x07 $$ create procedure 1x07(in e double) begin # Variables: declare euros integer default e div 1; #Parte entera declare centimos integer default truncate( (e-floor(e)), 2 )*100 div 1; #Parte decimal declare cincuentaEuros, diezEuros, dosEuros, unEuro, cincuentaCents, veinteCents, cincoCents, dosCents, unCents integer default 0; # Euros: set cincuentaEuros = euros div 50; set diezEuros = euros mod 50 div 10; set dosEuros = euros mod 50 mod 10 div 2; set unEuro = euros mod 50 mod 10 mod 2 div 1; # Centimos: set cincuentaCents = centimos div 50; set veinteCents = centimos mod 50 div 20; set cincoCents = centimos mod 50 mod 20 div 5; set dosCents = centimos mod 50 mod 20 mod 5 div 2; set unCents = centimos mod 50 mod 20 mod 5 mod 2 div 1; # Muestra el resultado de forma desglosada: select e as 'Total', if( cincuentaEuros = 0, null, cincuentaEuros ) as '50€', if( diezEuros = 0, null, diezEuros ) as '10€', if( dosEuros = 0, null, dosEuros ) as '2€', if( unEuro = 0, null, unEuro ) as '1€', if( cincuentaCents = 0, null, cincuentaCents ) as '0,50€', if( veinteCents = 0, null, veinteCents ) as '0,20€', if( cincoCents = 0, null, cincoCents ) as '0,05€', if( dosCents = 0, null, dosCents ) as '0,02€', if( unCents = 0, null, unCents ) as '0,01€' ; end $$ delimiter ; -- call 1x07(524.60); |
Mes: abril 2012
1×07: Muestra solo caracteres alfabéticos
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
/* Ejercicio 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 1x07 $$ create procedure 1x07(in cad varchar(30)) begin declare cadTemp varchar(30) default ''; declare carAscii int; declare i int default 1; while i <= char_length(cad) do set carAscii = ascii(mid(cad,i,1)); if carAscii >= 65 && carAscii <= 90 || carAscii >= 97 && carAscii <= 122 then set cadTemp = concat(cadTemp,mid(cad,i,1)); else set cadTemp = concat(cadTemp,' '); end if; set i = i + 1; end while; select cadTemp as 'Solo letras'; end$$ delimiter ; -- call 1x07('H0l@ qu3 t@l?'); |
1×06: Calcula número de trienios
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
/* Ejercicio 6: Escribir un procedimiento que visualice los trienios completos que hay entre dos fechas. */ delimiter $$ drop procedure if exists 1x06 $$ create procedure 1x06(in fecha1 date, in fecha2 date) begin select abs(datediff(fecha1,fecha2)) div 1095 as trianios; end$$ delimiter ; -- call 1x06('2012-04-12','2020-06-01'); |
1×05: Calcula número de años
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
/* Ejercicio 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 1x05 $$ create procedure 1x05(in fecha1 date, in fecha2 date) begin select abs(datediff(fecha1,fecha2)) div 365 as anios; end$$ delimiter ; -- call 1x05('2012-04-12','2020-06-01'); |
1×04: Usa otro procedimiento
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
/* Ejercicio 4: Escribir un procedimiento que haga uso del procedimiento anterior. */ delimiter $$ drop procedure if exists 1x04 $$ create procedure 1x04() begin call 1x03('2012-04-12'); end$$ delimiter ; -- call 1x04; |
1×03: Recibe fecha y devuelve año
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
/* Ejercicio 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 1x03 $$ create procedure 1x03( in fecha date ) begin select fecha as 'Fecha', year(fecha) as 'Año'; end$$ delimiter ; -- call 1x03('2012-04-12'); |
1×02: Invierte cadena
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
/* Ejercicio2: Codificar un procedimiento que reciba una cadena y la visualice al revés. */ delimiter $$ drop procedure if exists 1x02 $$ create procedure 1x02(in cad varchar(10)) begin select reverse(cad) as 'Resultado'; end$$ delimiter ; -- call 1x02('Hola mundo') |
1×01: Recibe dos números y devuelve suma
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
/* Ejercicio1: Escribir un procedimiento que reciba dos números y visualice su suma. */ delimiter $$ drop procedure if exists 1x01 $$ create procedure 1x01(in num1 int, in num2 int) sql security invoker -- Ejecuta el programa con los permisos del que lo ejecuta. begin select num1 + num2 as 'Resultado'; /* En oracle habria que añadir "from dual;" */ end$$ delimiter ; -- call 1x01(3,5); |