SELECT @numero:= 0 -- Crea variable entera SELECT function() -- Llama función CALL procedure() -- Llama procedimiento -- Procedimiento para obtener la fecha actual y un número aleatorio DELIMITER $$ CREATE FUNCTION date_random() RETURNS TEXT BEGIN RETURN CONCAT('Fecha: ', NOW()," Número: ", RAND()); END $$ DELIMITER ; -- Sobre la base de datos test, crea un procedimiento que muestre el año actual. DELIMITER $$ CREATE DEFINER=`root`@`localhost` FUNCTION `mostrarAnno`() RETURNS int(11) BEGIN RETURN EXTRACT(YEAR FROM now()); END -- Usa un procedimiento que sume 1 a una variable cada vez que se ejecute. DELIMITER $$ CREATE DEFINER=`root`@`localhost` PROCEDURE `masUno`(INOUT numero INT) BEGIN SET numero=numero+1; SELECT @numero; END -- Crea un procedimiento que muestre las 3 primera letras de una cadena pasada como parámetro en mayúsculas. DELIMITER $$ CREATE DEFINER=`root`@`%` PROCEDURE `cadena3M`(texto TEXT) BEGIN SELECT UPPER(LEFT(texto, 3)); END -- Crea un procedimiento que muestre 2 cadenas pasadas como parámetro concatenadas y en mayúsculas. DELIMITER $$ CREATE DEFINER=`root`@`%` PROCEDURE `concat`(texto1 TEXT, texto2 TEXT) BEGIN SELECT UPPER(CONCAT(texto1, texto2)); END -- Crea una función que devuelva el valor de la hipotenusa de un triángulo a partir de los valores de sus lados. DELIMITER $$ CREATE DEFINER=`root`@`%` FUNCTION `hipotenusa`(lado1 integer, lado2 integer) RETURNS int(11) BEGIN declare n integer; set n:= pow(lado1, 2)+pow(lado2, 2); RETURN sqrt(n); END -- Crea una función que calcule el total de puntos en un partido tomando como entrada el resultado en formato xxx-xxx. DELIMITER $$ CREATE DEFINER=`root`@`%` FUNCTION `sumaPuntos`(puntos text) RETURNS int(11) BEGIN declare n integer; set n:=substring(puntos, 1, 3); set n:=n+substring(puntos, 5, 7); RETURN n; END -- Crea un procedimiento que tiene como entrada un parámetro INT al cual se le suma 1 si el valor después de sumar 1, es 0 insertaremos --- en la tabla T el valor 10, si el parámetro es 0 actualizar tabla T sumando 1 al parámetro de entrada si no actualizar tabla T -- sumando 2 al parámetro de entrada. DELIMITER $$ CREATE DEFINER=`root`@`%` PROCEDURE `insertaNumeros`(n int) BEGIN CREATE TABLE IF NOT EXISTS test.T (numero int); set n=n+1; IF n=0 THEN insert into test.T VALUES(10); ELSEIF n=1 THEN insert into test.T VALUES(n+1); ELSE insert into test.T values(n+2); END IF; END -- Crear un procedimiento con un parámetro de entrada tipo INT, declarar una variable que tendrá el valor del parámetro +1 . -- Cuando el valor de la variable sea 0, insertaremos en la tabla T el valor 30, cuando sea 1 el valor 40, en cualquier otro caso el ------ valor 100. DELIMITER $$ CREATE DEFINER=`root`@`%` PROCEDURE `insertaNumeros2`(n int) BEGIN SELECT @num=n+1; CREATE TABLE IF NOT EXISTS test.T (numero int); set n=n+1; IF n=0 THEN insert into test.T VALUES(30); ELSEIF n=1 THEN insert into test.T VALUES(40); ELSE insert into test.T values(100); END IF; END -- Crea una función que devuelva 0 o 1 si un número es divisible o no por otro. DELIMITER $$ CREATE DEFINER=`root`@`%` FUNCTION `divisible`(num1 int, num2 int) RETURNS int(11) BEGIN IF MOD(num1, num2)=0 THEN RETURN 1; ELSE RETURN 0; END IF; END -- Usando estructura condicionales muestra el día de la semana según un valor numérico de entrada. DELIMITER $$ CREATE DEFINER=`root`@`%` FUNCTION `diaSemana`(n int) RETURNS text CHARSET latin1 BEGIN IF n=1 THEN RETURN 'Lunes'; ELSEIF n=2 THEN RETURN 'Martes'; ELSEIF n=3 THEN RETURN 'Miércoles'; ELSEIF n=4 THEN RETURN 'Jueves'; ELSEIF n=5 THEN RETURN 'Viernes'; ELSEIF n=6 then RETURN 'Sábado'; ELSEIF n=7 then RETURN 'Domingo'; ELSE RETURN 'No existe ese número de día'; END IF; END -- Crea una función que devuelva el mayor de tres números pasados por parámetros. DELIMITER $$ CREATE DEFINER=`root`@`%` FUNCTION `mayor`(n int, n1 int, n2 int) RETURNS int(11) BEGIN IF n>n1 then IF n>n2 then RETURN n; ELSE RETURN n2; END IF; ELSEIF n1>n2 then RETURN n1; ELSE RETURN n2; END IF; END -- Crea una función que devuelva 1 si ganó el visitante o 0 en caso contrario. parámetro (L)xxx-xxx(V) DELIMITER $$ CREATE DEFINER=`root`@`%` FUNCTION `ganador`(puntos text) RETURNS tinyint(1) BEGIN declare n, n2 integer; SET n:=substring(puntos, 1, 3); SET n2=substring(puntos, 5, 7); IF n2>n then return 1; else return 0; RETURN n; END IF; END -- Crea un procedimiento que diga si una palabra pasada como parámetro es palíndromo. DELIMITER $$ CREATE DEFINER=`root`@`%` PROCEDURE `palindromo`(palabra text) BEGIN if palabra=reverse(palabra) then SELECT 'Es palindromo'; Else SELECT 'No es palindromo'; END IF; END -- Crea una función en la base de datos liga, que compruebe si los partidos ganados por un equipo coinciden con el campo 'PG' en la --tabla equipo. -- Usa una función para insertar registros de los movimientos en una cuenta bancaria de un cliente comprobando previamente que la fecha -- es menor que la actual y que la operación no deja la cuenta en negativo. La función devolverá 0 en caso de error y 1 en cualquier -- otro caso. -- Crea un procedimiento en el que no se pasen parámetros que inserte en la tabla T 5 registros con valores desde el 1 hasta el 5.+ DELIMITER $$ CREATE DEFINER=`root`@`%` PROCEDURE `insertar5`() BEGIN declare i int; set i=1; looping: LOOP INSERT INTO test.T VALUES(i); set i=i+1; if i=6 THEN LEAVE looping; END IF; END LOOP looping; END -- Sobre la base Test crea un procedimiento que muestre la suma de los primero n números enteros. DELIMITER $$ CREATE DEFINER=`root`@`%` PROCEDURE `suma`(n int) BEGIN DECLARE i int; declare suma int; set i=1; set suma=0; REPEAT SET suma = suma+ i; set i =i+1; UNTIL i = n+1 END REPEAT; select suma; END -- Realiza un procedimiento que muestre la suma de los términos 1/n con n entre 1 y m. m!=0 DELIMITER $$ CREATE DEFINER=`root`@`%` PROCEDURE `nm`(m int) BEGIN DECLARE i INT; DECLARE suma float; SET suma=0; IF m < 1 THEN SELECT 'El parámetro debe ser un número mayor que 0'; ELSE SET i = 1; sumar: WHILE i<=m DO SET suma = suma+ 1/i; SET i=i+1; END WHILE sumar; SELECT suma; END IF; END -- Crea una función que determine si un número es primo devolviendo 0 o 1. DELIMITER $$ CREATE DEFINER=`root`@`%` FUNCTION `primo`(n INT) RETURNS int(11) BEGIN DECLARE i int default 2; DECLARE b boolean default 0; IF n<2 THEN RETURN 0; ELSEIF n=2 THEN RETURN 1; ELSE SET b = 1; calcularprimo: WHILE i0 do if(select primo(i)=1) then set suma=suma+i; set n=n-1; end if; set i=i+1; end while sumar; RETURN suma; END -- Crea un procedimiento para generar y almacenar en la tabla primos, cuyos atributos son id, numero, los primeros números primos. -- comprendidos entre 1 y m. DELIMITER $$ CREATE DEFINER=`root`@`%` PROCEDURE `almacenarPrimos`(n INT) BEGIN declare i int default 1; CREATE TABLE IF NOT EXISTS test.Primos( id INT NOT NULL AUTO_INCREMENT, primo INT NOT NULL, PRIMARY KEY (id) ); insertPrimo: while n<>0 do if(select primo(i)=1) then set n=n-1; INSERT INTO test.Primos(primo) VALUES(i); end if; set i=i+1; end while insertPrimo; END -- Modifica el procedimiento anterior para almacenar en la variable de salida @np el numero de primos almacenados. DELIMITER $$ CREATE DEFINER=`root`@`%` PROCEDURE `almacenarPrimos`(n INT) BEGIN declare i int default 1; set @np =0; CREATE TABLE IF NOT EXISTS test.Primos( id INT NOT NULL AUTO_INCREMENT, primo INT NOT NULL, PRIMARY KEY (id) ); insertPrimo: while n<>0 do if(select primo(i)=1) then set n=n-1; INSERT INTO test.Primos(primo) VALUES(i); set @np=@np+1; end if; set i=i+1; end while insertPrimo; select @np; END -- Crear un procedimiento que genere n registros aleatorios en la tabla movimientos. Cada registro deberá contener datos de clientes -- y cuentas existentes, la cantidad debe estar entre 1 y 100000 y la fecha será la actual. DELIMITER $$ CREATE DEFINER=`root`@`%` PROCEDURE `movimientos`(n int) BEGIN CREATE TABLE IF NOT EXISTS test.movimientos( id INT NOT NULL AUTO_INCREMENT, id_cliente INT, id_cuenta INT, cash INT, dated VARCHAR(25), PRIMARY KEY (id) ); set @i=0; BUCLE: WHILE @i < n DO SET @id_cliente:= RAND()*100000; SET @id_cuenta := RAND()*10000000; SET @cash := RAND()*10000000; SET @dated:= NOW(); INSERT INTO movimientos(id_cliente, id_cuenta, cash,dated) values(@id_cliente, @id_cuenta, @cash,@dated); SET @i=@i+1; END WHILE BUCLE; END --- 29042014 -- Realiza un procedimiento que muestre el nombre del autor que más noticias ha publicado en el último mes. -- Realiza un procedimiento que muestre los datos de los clientes, la cuenta y el saldo de los clientes con saldo negativo en alguna -- de sus cuentas. -- Crea un procedimiento que sume todos los ingresos y todos los cargos por separados en todas las cuentas de la base de datos banco. -- Crea un procedimiento que muestre el número máximo de partidos seguidos ganados por un equipo en casa -- La base de datos Bancos tiene una tabla cliente (cod_cliente, dni, nombre, apellido1, apellido2, direccion) -- tabla cuenta (tipo, fecha_creacion, saldo, cod_cuenta) -- tabla movimiento (fecha, cantidad, dni, cod_cuenta, id_mov) -- tabla tiene (dni, cod_cuenta)