tsunamigue

Ejercicios MySQL

Apr 21st, 2014
944
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 10.08 KB | None | 0 0
  1. SELECT @numero:= 0 -- Crea variable entera
  2. SELECT FUNCTION()  -- Llama función
  3. CALL PROCEDURE()   -- Llama procedimiento
  4.  
  5. -- Procedimiento para obtener la fecha actual y un número aleatorio
  6. DELIMITER $$
  7. CREATE FUNCTION date_random()
  8.     RETURNS TEXT
  9.     BEGIN
  10.     RETURN CONCAT('Fecha: ', NOW()," Número: ", RAND());
  11.     END
  12.     $$
  13.     DELIMITER ;
  14.  
  15. -- Sobre la base de datos test, crea un procedimiento que muestre el año actual.
  16.  
  17. DELIMITER $$
  18.  
  19. CREATE DEFINER=`root`@`localhost` FUNCTION `mostrarAnno`() RETURNS int(11)
  20. BEGIN
  21.  
  22. RETURN EXTRACT(YEAR FROM now());
  23. END
  24.  
  25.  
  26. -- Usa un procedimiento que sume 1 a una variable cada vez que se ejecute.
  27.  
  28. DELIMITER $$
  29.  
  30. CREATE DEFINER=`root`@`localhost` PROCEDURE `masUno`(INOUT numero INT)
  31. BEGIN
  32. SET numero=numero+1;
  33. SELECT @numero;
  34. END
  35.  
  36. -- Crea un procedimiento que muestre las 3 primera letras de una cadena pasada como parámetro en mayúsculas.
  37.  
  38. DELIMITER $$
  39.  
  40. CREATE DEFINER=`root`@`%` PROCEDURE `cadena3M`(texto TEXT)
  41. BEGIN
  42. SELECT UPPER(LEFT(texto, 3));
  43. END
  44.  
  45. -- Crea un procedimiento que muestre 2 cadenas pasadas como parámetro concatenadas y en mayúsculas.
  46.  
  47. DELIMITER $$
  48.  
  49. CREATE DEFINER=`root`@`%` PROCEDURE `CONCAT`(texto1 TEXT, texto2 TEXT)
  50. BEGIN
  51. SELECT UPPER(CONCAT(texto1, texto2));
  52. END
  53. -- Crea una función que devuelva el valor de la hipotenusa de un triángulo a partir de los valores de sus lados.
  54.  
  55. DELIMITER $$
  56.  
  57. CREATE DEFINER=`root`@`%` FUNCTION `hipotenusa`(lado1 INTEGER, lado2 INTEGER) RETURNS int(11)
  58. BEGIN
  59. DECLARE n INTEGER;
  60. SET n:= pow(lado1, 2)+pow(lado2, 2);
  61.  
  62. RETURN SQRT(n);
  63. END
  64.  
  65. -- Crea una función que calcule el total de puntos en un partido tomando como entrada el resultado en formato xxx-xxx.
  66.  
  67. DELIMITER $$
  68.  
  69. CREATE DEFINER=`root`@`%` FUNCTION `sumaPuntos`(puntos text) RETURNS int(11)
  70. BEGIN
  71. DECLARE n INTEGER;
  72. SET n:=substring(puntos, 1, 3);
  73. SET n:=n+substring(puntos, 5, 7);
  74.  
  75. RETURN n;
  76. END
  77.  
  78. -- 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
  79. -- sumando 2 al parámetro de entrada.
  80.  
  81.  
  82. DELIMITER $$
  83.  
  84. CREATE DEFINER=`root`@`%` PROCEDURE `insertaNumeros`(n int)
  85. BEGIN
  86. CREATE TABLE IF NOT EXISTS test.T (numero int);
  87.    SET n=n+1;
  88.     IF n=0 THEN
  89.     INSERT INTO test.T VALUES(10);
  90.     ELSEIF n=1 THEN
  91.     INSERT INTO test.T VALUES(n+1);
  92.     ELSE
  93.     INSERT INTO test.T VALUES(n+2);
  94.     END IF;
  95. END
  96.  
  97. -- Crear un procedimiento con un parámetro de entrada tipo INT, declarar una variable que tendrá el valor del parámetro +1 .
  98. -- 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.
  99.  
  100. DELIMITER $$
  101.  
  102. CREATE DEFINER=`root`@`%` PROCEDURE `insertaNumeros2`(n int)
  103. BEGIN
  104. SELECT @num=n+1;
  105. CREATE TABLE IF NOT EXISTS test.T (numero int);
  106.    SET n=n+1;
  107.     IF n=0 THEN
  108.     INSERT INTO test.T VALUES(30);
  109.     ELSEIF n=1 THEN
  110.     INSERT INTO test.T VALUES(40);
  111.     ELSE
  112.     INSERT INTO test.T VALUES(100);
  113.     END IF;
  114. END
  115.  
  116. -- Crea una función que devuelva 0 o 1 si un número es divisible o no por otro.
  117.  
  118. DELIMITER $$
  119.  
  120. CREATE DEFINER=`root`@`%` FUNCTION `divisible`(num1 int, num2 int) RETURNS int(11)
  121. BEGIN
  122. IF MOD(num1, num2)=0 THEN
  123. RETURN 1;
  124. ELSE
  125. RETURN 0;
  126. END IF;
  127. END
  128.  
  129. -- Usando estructura condicionales muestra el día de la semana según un valor numérico de entrada.
  130.  
  131. DELIMITER $$
  132.  
  133. CREATE DEFINER=`root`@`%` FUNCTION `diaSemana`(n int) RETURNS text CHARSET latin1
  134. BEGIN
  135. IF n=1 THEN
  136. RETURN 'Lunes';
  137. ELSEIF n=2 THEN
  138. RETURN 'Martes';
  139. ELSEIF n=3 THEN
  140. RETURN 'Miércoles';
  141. ELSEIF n=4 THEN
  142. RETURN 'Jueves';
  143. ELSEIF n=5 THEN
  144. RETURN 'Viernes';
  145. ELSEIF n=6 THEN
  146. RETURN 'Sábado';
  147. ELSEIF n=7 THEN
  148. RETURN 'Domingo';
  149. ELSE
  150. RETURN 'No existe ese número de día';
  151. END IF;
  152. END
  153. -- Crea una función que devuelva el mayor de tres números pasados por parámetros.
  154.  
  155. DELIMITER $$
  156.  
  157. CREATE DEFINER=`root`@`%` FUNCTION `mayor`(n int, n1 int, n2 int) RETURNS int(11)
  158. BEGIN
  159. IF n>n1 THEN
  160.     IF n>n2 THEN   
  161.         RETURN n;
  162.     ELSE
  163.         RETURN n2;
  164.     END IF;
  165. ELSEIF n1>n2 THEN
  166.     RETURN n1;
  167. ELSE
  168.     RETURN n2;
  169. END IF;
  170.  
  171. END
  172.  
  173. -- Crea una función que devuelva 1 si ganó el visitante o 0 en caso contrario. parámetro (L)xxx-xxx(V)
  174.  
  175. DELIMITER $$
  176.  
  177. CREATE DEFINER=`root`@`%` FUNCTION `ganador`(puntos text) RETURNS tinyint(1)
  178. BEGIN
  179. DECLARE n, n2 INTEGER;
  180. SET n:=substring(puntos, 1, 3);
  181. SET n2=substring(puntos, 5, 7);
  182.  
  183. IF n2>n THEN
  184. RETURN 1;
  185. ELSE
  186. RETURN 0;
  187. RETURN n;
  188. END IF;
  189. END
  190. -- Crea un procedimiento que diga si una palabra pasada como parámetro es palíndromo.
  191.  
  192. DELIMITER $$
  193.  
  194. CREATE DEFINER=`root`@`%` PROCEDURE `palindromo`(palabra text)
  195. BEGIN
  196.  
  197. IF palabra=REVERSE(palabra) THEN
  198. SELECT 'Es palindromo';
  199. ELSE
  200. SELECT 'No es palindromo';
  201. END IF;
  202. END
  203.  
  204. -- 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
  205. --tabla  equipo.
  206.  
  207.  
  208. -- Usa una función para insertar registros de los movimientos en una cuenta bancaria de un cliente comprobando previamente que la fecha
  209. -- 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
  210. -- otro caso.
  211.  
  212.  
  213. -- 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.+
  214.  
  215. DELIMITER $$
  216.  
  217. CREATE DEFINER=`root`@`%` PROCEDURE `insertar5`()
  218. BEGIN
  219. DECLARE i int;
  220. SET i=1;
  221. looping: LOOP
  222.     INSERT INTO test.T VALUES(i);
  223. SET i=i+1;
  224. IF i=6 THEN
  225.  LEAVE looping;
  226. END IF;
  227. END LOOP looping;
  228. END
  229.  
  230. -- Sobre la base Test crea un procedimiento que muestre la suma de los primero n números enteros.
  231.  
  232. DELIMITER $$
  233.  
  234. CREATE DEFINER=`root`@`%` PROCEDURE `suma`(n int)
  235. BEGIN
  236. DECLARE i int;
  237. DECLARE suma int;
  238. SET i=1;
  239. SET suma=0;
  240.        REPEAT
  241.          SET suma = suma+ i;
  242. SET i =i+1;
  243.        UNTIL i = n+1 END REPEAT;
  244. SELECT suma;
  245. END
  246.  
  247. -- Realiza un procedimiento que muestre la suma de los términos 1/n con n entre 1 y m. m!=0
  248.  
  249. DELIMITER $$
  250.  
  251. CREATE DEFINER=`root`@`%` PROCEDURE `nm`(m int)
  252. BEGIN
  253. DECLARE i INT;
  254. DECLARE suma FLOAT;
  255. SET suma=0;
  256. IF m < 1 THEN
  257. SELECT 'El parámetro debe ser un número mayor que 0';
  258. ELSE
  259.     SET i = 1;
  260. sumar: WHILE i<=m DO  
  261. SET suma = suma+ 1/i;
  262. SET i=i+1;
  263.     END WHILE sumar;
  264. SELECT suma;
  265. END IF;
  266. END
  267.  
  268. -- Crea una función que determine si un número es primo devolviendo 0 o 1.
  269.  
  270. DELIMITER $$
  271.  
  272. CREATE DEFINER=`root`@`%` FUNCTION `primo`(n INT) RETURNS int(11)
  273. BEGIN
  274. DECLARE i int DEFAULT 2;
  275. DECLARE b BOOLEAN DEFAULT 0;
  276.      
  277. IF n<2 THEN
  278.     RETURN 0;
  279. ELSEIF n=2 THEN
  280.     RETURN 1;
  281. ELSE
  282.     SET b = 1;
  283.     calcularprimo: WHILE i<n DO
  284.         IF MOD(n,i)=0 THEN
  285.             SET b=0;
  286.             LEAVE calcularprimo;
  287.         END IF;
  288.         SET i=i+1;
  289.     END WHILE calcularprimo;
  290.     RETURN b;
  291. END IF;
  292. END
  293.  
  294. -- Usando la función anterior crea otra que calcule la suma de los primeros n números primos empezando en el 1.
  295.  
  296. DELIMITER $$
  297.  
  298. CREATE DEFINER=`root`@`%` FUNCTION `sumarPrimos`(n INT) RETURNS int(11)
  299. BEGIN
  300.  
  301. DECLARE i int DEFAULT 1;
  302. DECLARE suma int DEFAULT 0;
  303.  
  304. sumar: WHILE n<>0 DO
  305.     IF(SELECT primo(i)=1) THEN
  306.         SET suma=suma+i;
  307.         SET n=n-1;
  308.     END IF;
  309.     SET i=i+1;
  310. END WHILE sumar;
  311. RETURN suma;
  312.  
  313. END
  314.  
  315. -- Crea un procedimiento para generar y almacenar en la tabla primos, cuyos atributos son id, numero, los primeros números primos.
  316. -- comprendidos entre 1 y m.
  317.  
  318. DELIMITER $$
  319.  
  320. CREATE DEFINER=`root`@`%` PROCEDURE `almacenarPrimos`(n INT)
  321. BEGIN
  322.  
  323. DECLARE i int DEFAULT 1;
  324.  
  325.  
  326. CREATE TABLE IF NOT EXISTS test.Primos(
  327.              id INT NOT NULL AUTO_INCREMENT,
  328.              primo INT NOT NULL,
  329.              PRIMARY KEY (id)
  330.              );
  331.  
  332. insertPrimo: WHILE n<>0 DO
  333.     IF(SELECT primo(i)=1) THEN
  334.         SET n=n-1;
  335. INSERT INTO test.Primos(primo) VALUES(i);
  336.     END IF;
  337.     SET i=i+1;
  338. END WHILE insertPrimo;
  339. END
  340.  
  341. -- Modifica el procedimiento anterior para almacenar en la variable de salida @np el numero de primos almacenados.
  342.  
  343. DELIMITER $$
  344.  
  345. CREATE DEFINER=`root`@`%` PROCEDURE `almacenarPrimos`(n INT)
  346. BEGIN
  347.  
  348. DECLARE i int DEFAULT 1;
  349. SET @np =0;
  350.  
  351. CREATE TABLE IF NOT EXISTS test.Primos(
  352.              id INT NOT NULL AUTO_INCREMENT,
  353.              primo INT NOT NULL,
  354.              PRIMARY KEY (id)
  355.              );
  356.  
  357. insertPrimo: WHILE n<>0 DO
  358.     IF(SELECT primo(i)=1) THEN
  359.         SET n=n-1;
  360. INSERT INTO test.Primos(primo) VALUES(i);
  361. SET @np=@np+1;
  362.     END IF;
  363.     SET i=i+1;
  364. END WHILE insertPrimo;
  365.  
  366. SELECT @np;
  367.  
  368. END
  369.  
  370. -- Crear un procedimiento que genere n registros aleatorios en la tabla movimientos. Cada registro deberá contener datos de clientes
  371. -- y cuentas existentes, la cantidad debe estar entre 1 y 100000 y la fecha será la actual.
  372.  
  373. DELIMITER $$
  374.  
  375. CREATE DEFINER=`root`@`%` PROCEDURE `movimientos`(n int)
  376. BEGIN
  377.  
  378.  
  379. CREATE TABLE IF NOT EXISTS test.movimientos(
  380.              id INT NOT NULL AUTO_INCREMENT,
  381.              id_cliente INT,
  382.              id_cuenta INT,
  383.              cash INT,
  384.              dated VARCHAR(25),
  385.              PRIMARY KEY (id)
  386.              );
  387.  
  388. SET @i=0;
  389. BUCLE: WHILE @i < n DO
  390. SET @id_cliente:= RAND()*100000;
  391. SET @id_cuenta := RAND()*10000000;
  392. SET @cash := RAND()*10000000;
  393. SET @dated:= NOW();
  394. INSERT INTO movimientos(id_cliente, id_cuenta, cash,dated) VALUES(@id_cliente, @id_cuenta, @cash,@dated);
  395. SET @i=@i+1;
  396. END WHILE BUCLE;
  397.  
  398. END
  399.  
  400.  
  401.  
  402. --- 29042014
  403.  
  404. -- Realiza un procedimiento que muestre el nombre del autor que más noticias ha publicado en el último mes.
  405. -- Realiza un procedimiento que muestre los datos de los clientes, la cuenta y el saldo de los clientes con saldo negativo en alguna
  406. -- de sus cuentas.
  407. -- Crea un procedimiento que sume todos los ingresos y todos los cargos por separados en todas las cuentas de la base de datos banco.
  408. -- Crea un procedimiento que muestre el número máximo de partidos seguidos ganados por un equipo en casa
  409.  
  410. -- La base de datos Bancos tiene una    tabla cliente       (cod_cliente, dni, nombre, apellido1, apellido2, direccion)
  411. --                      tabla cuenta        (tipo, fecha_creacion, saldo, cod_cuenta)
  412. --                      tabla movimiento    (fecha, cantidad, dni, cod_cuenta, id_mov)
  413. --                  tabla tiene     (dni, cod_cuenta)
Advertisement
Add Comment
Please, Sign In to add comment