lunes, 30 de enero de 2017

1.Crear un procedimiento almacenado que devuelva el valor de la hipotenusa
 de un triángulo a partir de los valores de sus lados que se pasan como parámetros.
DELIMITER $$
 DROP PROCEDURE IF EXISTS hipo$$
CREATE PROCEDURE hipo(a INT, b INT)              USE jardinería;
BEGIN                                                                              CALL hipo (1,2);
 SELECT SQRT(POW(a,2)+POW(b,2)) AS hipotenusa;
END;$$
DELIMITER ;
2.Crea un procedimiento que muestre dos cadenas, pasadas como parámetros,
 concatenadas y en mayúsculas. Funciones texto:
DELIMITER $$
DROP PROCEDURE IF EXISTS conca$$
 CREATE PROCEDURE conca(a CHAR(50), b CHAR(50))
 BEGIN
 SELECT UPPER(CONCAT(a, ‘ ‘, b)) AS concatenacion;
 END;$$ DELIMITER ;


Crear una función almacenada, para mostrar el día de la semana según
 un valor de entrada numérico, de la siguiente forma: 1 para lunes, 2 para martes, etc.
 DELIMITER $$
DROP FUNCTION IF EXISTS calendario$$
 CREATE FUNCTION calendario(n INT) RETURNs CHAR(10)
 NO SQL
 BEGIN
DECLARE s CHAR(10);
 CASE n
 WHEN 1 THEN SET s = "Lunes";
  WHEN 2 THEN SET s = "Martes";
 WHEN 3 THEN SET s = "Miércoles";
  WHEN 4 THEN SET s = "Jueves";
 WHEN 5 THEN SET s = "Viernes";
 WHEN 6 THEN SET s = "Sábado";
 WHEN 7 THEN SET s = "Domingo";
 ELSE SET s = "Error";
END CASE;
 RETURN (s);
 END; $$
DELIMITER ;




Funcion almacenada que calcule la suma de 2 numeros
Comprendidos entre dos números introducidos como parámetro.
Los dos números no deben incluirse en la suma.
DELIMITER $$
DROP FUNCTION IF EXISTS suma_num$$
CREATE FUNCTION suma_num(n1 INT, n2 INT) RETURNS INT
NO SQL
DECLARE cont, sum INT;
IF n2 < n1 THEN
BEGIN
SET sum = n1;
SET n1=n2;

SET n2= sum;
END;
END IF;
SET sum =0;
SET cont= n1+1;
 b1: WHILE cont <n2 DO
SET sum= sum+cont;
SET cont = cont+1;
END WHILE b1;
RETURN (sum);
END; $$
DELIMITER;



Crear procedimieinto q reciba 5 numeros como parámetro
Y calcular su media aritmética.
DELIMITER $$
DROP PROCEDURE IF EXISTS ejer1$$
CREATE PROCEDURE eje1(num1 int, num2 int, num3 int,
Num4 int, num5 int)
BEGIN
DECLARE RESULT INT;
DECLARE TIMES INT;
SET TIMES=5;
SET RESULT=((num1+num2+num3+num4+num5)/TIMES);
SELECT RESULT AS Resultado;      use bd;
END;$$                                    call ejer1(1,2,3,4,5);
DELIMITER;

Crear procedimiento q reciba 10 numeros como parámetro
E indique cual es mayor y cual es menor.
DELIMITER $$
DROP PROCEDURE IF EXISTS ejer2$$
CREATE PROCEDURE ejer2(uno int, dos int, tres int, cuatro …)
BEGIN
SELECT GREATEST(uno,dos,tres,cuatro,cinco..) AS Mayor;
SELECT LEAST(uno,dos tres, cuatro, cinco..) AS Menor;
END;
DELIMITER $$    use test;            
 CALL ejer2(1,2,3,4,5,6,7,8,9,10);
                       








Crear función q reciba parámetro un numero y devuelva 0
Si no es primo o un 1 si lo es:
DELIMITER $$
DROP FUNCTION EXISTS ejer3$$
CREATE FUNCTION ejer3(num INT)
RETURNS INT
BEGIN
   DECLARE i INT;
   DECLARE primo INT;
   SET i=2;
   SET primo=1;
IF num < 2 THEN

  SET primo=0;
ELSEIF num=2 THEN
  ELSE primo=1;
ELSE
Bucle: WHILE i <= SQRT(num) DO
IF (num%i)= 0 THEN
SET primo=0;
LEAVE bucle;
END IF;                                     use test;
SET i=i+1;                                  SELECT ejer3(50);
END WHILE;
RETURN (primo);
END IF;
END;$$







SERIE FIBONACCI comienza en 0 y el segundo 1 y resto
Calculan sumando dos números anteriores
N=(n-2)+(n-1).(ej:0,1,2,3,5,8..)
DELIMITER $$
DROP PROCEDURE IF EXISTS ejer4$$
CREATE PROCEDURE ejer4(num INT)
BEGIN
DECLARE num1 INT;
DECLARE num2 INT;
DECLARE CNT INT;
DECLARE CNT2 INT;
DECLARE result INT;
DECLARE FIBONACCI VARCHAR(255);
SET num1=0;
SET num2=1;
SET CNT=0;
SET FIBO=””;
SET CNT2=(num-2);

SET FIBO=CONCAT(FIBO,num1);
SET FIBO=CONCAT_WS(‘,’,FIBO,num2);
WHILE CNT < CNT2 DO
SET result=num1+num2;
SET FIBO=CONCAT_WS(‘,’,FIBO,result);
SENT CNT=CNT+1;
SET num1=num2;                     call ejer4(10);
SET num2=result;
END WHILE;
SELECT FIBO AS ‘Serie fibonacci’;
END;$$
DELIMITER $$

domingo, 29 de enero de 2017

Responder a las siguientes preguntas de forma breve pero clara.
1.       ¿Qué es FETCH?
FETCH es un comando relacionado con los cursores que extrae la siguiente fila de valores del conjunto de los resultados del cursor moviendo su puntero interno en una posición.
2.       ¿Para qué se utilizan los cursores?
Los cursores se utilizan para manipular los datos de una fila que queramos recuperar dichos datos. Se puede asociar con un conjunto de filas.
3. ¿Qué ocurre si hacemos un fetch antes que un open?
Si no realizamos un open no inicializa el conjunto de resultados asociados con el cursor entonces si realizamos un fetch antes que un open no nos extraerá la siguiente fila de valores.
4. ¿Qué ocurre si al declarar un cursor no declaramos su handler?
Se producirá un error que significara que hemos llegado a la ultima fila.
5. ¿Qué ocurre si no se utiliza la sentencia close en un cursor?
Que el cursos no se cierra y sigue ocupando y teniendo acceso a la memoria de sus datos
6. Define lo qué es un trigger.
Un trigger es como un contador de funciones, cada vez que el usuario crea una sentencia con trigger, esté suma las veces que se introduce un nuevo movimiento con dicha sentencia.
7. ¿Qué tipos de triggers existen? Diferencias.
De orden que define el tipo de operación y provoca la activacion del trigger (son los valoresINSERT, UPDATE o DELETE.)
De temporalizacion(before o after). Estos deciden si se activan antes o despues de que se ejecute la operación anterior (Las de ORDEN).
De nivel (Fila u orden). Estos se activan una vez por cala fila afectada por la orden que provocó el disparo. Se desactivan solo una vez, antes o despues de la orden. Estos se pueden identificar por la clausula for each row.
8. ¿Cómo podemos saber que triggers se han creado en una base de datos?
Podemos consultarlo en la tabla INFORMATION_SCHEMA.TRIGGERS




9. ¿Qué usos tienen los triggers?
Se pueden usar para controles de sesiones, que nos permiten ver un resumen de lo realizado en una sesión de un usuario. Tambien se pueden usar para el control de valores de entrada, mantenimiento de campos derivados, estadisticas o registro y auditoria.
10. ¿Cuándo se ejecuta un trigger?
Se ejecuta cuando implícitamente se ejecuta una sentencia INSERT, UPDATE o DELETE.
               

1. Realizar un procedimiento almacenado que nos muestre a partir de un número introducido como parámetro cuales su factorial. (Ejemplo: 6! = 6*5*4*3*2*1 = 720) Para realizarla se debe utilizar un bucle.








  

2. Se conoce como sucesión de Padovan aquella cuyo término enésimo se calcula como n = (n- 2)+(n-3) Ejemplo: 1, 1, 1, 2, 2, 3, 4, 5, 7,… Crear un procedimiento almacenado que reciba como parámetro un número x, mayor de3, y calcule los x primeros números de la sucesión de Padovan.

 





















3. Realizar una función almacenada que devuelva, a partir de un número introducido como parámetro, si es perfecto o no. Un número es perfecto cuando es igual a la suma de sus divisores. Ejemplo: 6 = 1 + 2+ 3














Nota.- Para resolverlo crear previamente una función almacenada que dados dos números como parámetros devuelva si uno es divisor del otro.