Estructura general de un programa en el servidor de Bases de Datos
-
Upload
kylynn-chen -
Category
Documents
-
view
23 -
download
2
description
Transcript of Estructura general de un programa en el servidor de Bases de Datos
![Page 1: Estructura general de un programa en el servidor de Bases de Datos](https://reader030.fdocuments.in/reader030/viewer/2022032804/56812a43550346895d8d6c38/html5/thumbnails/1.jpg)
• Estructura general de un programa en el servidor de Bases de Datos
![Page 2: Estructura general de un programa en el servidor de Bases de Datos](https://reader030.fdocuments.in/reader030/viewer/2022032804/56812a43550346895d8d6c38/html5/thumbnails/2.jpg)
Sintaxis general:
CREATE PROCEDURE sp_name ([ parameter[ ,…] ] )routine_body
Donde:• parameter: [ IN | OUT | INOUT ] param_name type • type: Cualquier tipo de dato válido para mysql.• routine_body: comandos SQL válidos
![Page 3: Estructura general de un programa en el servidor de Bases de Datos](https://reader030.fdocuments.in/reader030/viewer/2022032804/56812a43550346895d8d6c38/html5/thumbnails/3.jpg)
CREATE PROCEDURE sp_name ([ parameter[ ,…] ] )
routine_body
• Bloque Cabecera
• Bloque de Ejecución
![Page 4: Estructura general de un programa en el servidor de Bases de Datos](https://reader030.fdocuments.in/reader030/viewer/2022032804/56812a43550346895d8d6c38/html5/thumbnails/4.jpg)
• Tipos de Programas en el lado del servidor:
• Procedimientos almacenados
• Funciones de Usuario.
• Triggers. (se verá después)
![Page 5: Estructura general de un programa en el servidor de Bases de Datos](https://reader030.fdocuments.in/reader030/viewer/2022032804/56812a43550346895d8d6c38/html5/thumbnails/5.jpg)
• El punto y coma (;) es el delimitador por defecto.• Los procedimientos almacenados y funciones
pueden contener varias sentencias que terminan con este delimitador.
• Se debe indicar a MySQL que temporalmente NO lo usaremos como carácter delimitador, eso lo haremos usando la sentencia DELIMITER.
![Page 6: Estructura general de un programa en el servidor de Bases de Datos](https://reader030.fdocuments.in/reader030/viewer/2022032804/56812a43550346895d8d6c38/html5/thumbnails/6.jpg)
![Page 7: Estructura general de un programa en el servidor de Bases de Datos](https://reader030.fdocuments.in/reader030/viewer/2022032804/56812a43550346895d8d6c38/html5/thumbnails/7.jpg)
• BEGIN - END
• [etiqueta_inicio:] BEGIN • [lista_sentencias] • END [etiqueta_fin]
• La sintaxis BEGIN ... END se utiliza para escribir sentencias compuestas que pueden aparecer en el interior de procedimientos almacenados.
• Una sentencia compuesta puede contener múltiples sentencias, encerradas por las palabras BEGIN y END.
• lista_sentencias es una lista de una o más sentencias. • Cada sentencia dentro de lista_sentencias debe terminar con un
punto y como (;) delimitador de sentencias.
![Page 8: Estructura general de un programa en el servidor de Bases de Datos](https://reader030.fdocuments.in/reader030/viewer/2022032804/56812a43550346895d8d6c38/html5/thumbnails/8.jpg)
• DECLARE
• El comando DECLARE se usa para definir variables locales que se utilizarán dentro de los PA.
• DECLARE puede usarse sólo dentro de comandos compuestos BEGIN ... END y deben ser su inicio, antes de cualquier otro comando.
![Page 9: Estructura general de un programa en el servidor de Bases de Datos](https://reader030.fdocuments.in/reader030/viewer/2022032804/56812a43550346895d8d6c38/html5/thumbnails/9.jpg)
CREATE PROCEDURE sp_name ([ parameter[ ,…] ] )
Begin
Declare…
…
End
• Bloque Cabecera• Bloque de Ejecución• Bloque de Declaracion
![Page 10: Estructura general de un programa en el servidor de Bases de Datos](https://reader030.fdocuments.in/reader030/viewer/2022032804/56812a43550346895d8d6c38/html5/thumbnails/10.jpg)
• Como se invocan???
• PROCEDURE: sentencia call• mysql> call nombre_del_procedimiento();
• FUNCTION: select• mysql> select nombre_funcion();
• TRIGGER: no se invoca
![Page 11: Estructura general de un programa en el servidor de Bases de Datos](https://reader030.fdocuments.in/reader030/viewer/2022032804/56812a43550346895d8d6c38/html5/thumbnails/11.jpg)
• Recordando…
• Funciones SQL estándar.• Clasificación:
– Funciones Numéricas.– Agregación.– Fecha y Hora.– Cadena de caracteres.– Otras.
• Investigar sobre fns. SQL estándar.
![Page 12: Estructura general de un programa en el servidor de Bases de Datos](https://reader030.fdocuments.in/reader030/viewer/2022032804/56812a43550346895d8d6c38/html5/thumbnails/12.jpg)
• Funciones definidas por el usuario
![Page 13: Estructura general de un programa en el servidor de Bases de Datos](https://reader030.fdocuments.in/reader030/viewer/2022032804/56812a43550346895d8d6c38/html5/thumbnails/13.jpg)
• Sintaxis:
• CREATE FUNCTION sp_name ([parameter[,...]]) RETURNS type routine_body
• Una funcion (FUNCTION) es un procedimiento almacenado (PROCEDURE).
• Difieren de los procedimientos en: • La lista de parámetros solo puede contener parámetros de entrada. • IN, OUT o INOUT es solo válido para PA.• Una funcion siempre debe retornar un valor del tipo definido en la
declaracion de la funcion. • Las fns. pueden ser llamadas dentro de sentencias sql• Una funcion no puede devolver un registro de datos.
![Page 14: Estructura general de un programa en el servidor de Bases de Datos](https://reader030.fdocuments.in/reader030/viewer/2022032804/56812a43550346895d8d6c38/html5/thumbnails/14.jpg)
delimiter //CREATE FUNCTION Cubo(Numero float)RETURNS floatBEGINdeclare cubo1 float;set cubo1=(Numero * Numero * Numero);return cubo1;END;//
Si requiero utilizar esta fn…
Select cubo(4),….Select cubo(numero) from tabla
![Page 15: Estructura general de un programa en el servidor de Bases de Datos](https://reader030.fdocuments.in/reader030/viewer/2022032804/56812a43550346895d8d6c38/html5/thumbnails/15.jpg)
• Crear una tabla con Nombre, Nota 1, Nota 2, Nota 3.
• Crear una función que calcule el promedio de estas 3 notas.
• Notas sin decima.
![Page 16: Estructura general de un programa en el servidor de Bases de Datos](https://reader030.fdocuments.in/reader030/viewer/2022032804/56812a43550346895d8d6c38/html5/thumbnails/16.jpg)
DELIMITER //
CREATE FUNCTION promedio_normal (numero1 int, numero2 int, numero3 int) RETURNS float
BEGINdeclare prom float;set prom=((numero1+numero2+numero3)/3);return prom;END;//
• select nota1, nota2, nota3, promedio_normal(nota1, nota2, nota3) from alumno;
![Page 17: Estructura general de un programa en el servidor de Bases de Datos](https://reader030.fdocuments.in/reader030/viewer/2022032804/56812a43550346895d8d6c38/html5/thumbnails/17.jpg)
DELIMITER //
CREATE FUNCTION promedio_normal_otro (numero1 int, numero2 int, numero3 int) RETURNS float
BEGIN
declare sum int;
declare prom float;
set sum=numero1+numero2+numero3;
set prom=(sum/3);
return prom;
END;
//
![Page 18: Estructura general de un programa en el servidor de Bases de Datos](https://reader030.fdocuments.in/reader030/viewer/2022032804/56812a43550346895d8d6c38/html5/thumbnails/18.jpg)
• Notas con una decima.
• Promedio de notas con una decima.
![Page 19: Estructura general de un programa en el servidor de Bases de Datos](https://reader030.fdocuments.in/reader030/viewer/2022032804/56812a43550346895d8d6c38/html5/thumbnails/19.jpg)
DELIMITER //
CREATE FUNCTION promedio_decimas (numero1 float, numero2 float, numero3 float) RETURNS float
BEGINdeclare prom float;set prom=round(((numero1+numero2+numero3)/3),1);return prom;END;//
![Page 20: Estructura general de un programa en el servidor de Bases de Datos](https://reader030.fdocuments.in/reader030/viewer/2022032804/56812a43550346895d8d6c38/html5/thumbnails/20.jpg)
• Crear una función que calcule el promedio ponderado de estas 3 notas (decimal).
• Ponderacion: 20%, 30%, 50%
![Page 21: Estructura general de un programa en el servidor de Bases de Datos](https://reader030.fdocuments.in/reader030/viewer/2022032804/56812a43550346895d8d6c38/html5/thumbnails/21.jpg)
DELIMITER //
CREATE FUNCTION promedio_ponderado (numero1 float, numero2 float, numero3 float) RETURNS float
BEGINdeclare prom float;set
prom=round((numero1*0.2+numero2*0.3+numero3*0.5),1);
return prom;END;//
![Page 22: Estructura general de un programa en el servidor de Bases de Datos](https://reader030.fdocuments.in/reader030/viewer/2022032804/56812a43550346895d8d6c38/html5/thumbnails/22.jpg)
• Usando una ponderación cualquiera que se de en el momento.
![Page 23: Estructura general de un programa en el servidor de Bases de Datos](https://reader030.fdocuments.in/reader030/viewer/2022032804/56812a43550346895d8d6c38/html5/thumbnails/23.jpg)
DELIMITER //
CREATE FUNCTION promedio_ponderado_cual (numero1 float, numero2 float, numero3 float, p1 int, p2 int, p3 int) RETURNS float
BEGIN
declare prom float;
set prom=round((numero1*p1/100+numero2*p2/100+numero3*p3/100),1);
return prom;
END;
//
![Page 24: Estructura general de un programa en el servidor de Bases de Datos](https://reader030.fdocuments.in/reader030/viewer/2022032804/56812a43550346895d8d6c38/html5/thumbnails/24.jpg)
• Ponderaciones suman 1…
• Qué pasa si la suma de ponderaciones no suman 1???
• Qué se puede hacer?
![Page 25: Estructura general de un programa en el servidor de Bases de Datos](https://reader030.fdocuments.in/reader030/viewer/2022032804/56812a43550346895d8d6c38/html5/thumbnails/25.jpg)
• Algunas estructuras de control.
![Page 26: Estructura general de un programa en el servidor de Bases de Datos](https://reader030.fdocuments.in/reader030/viewer/2022032804/56812a43550346895d8d6c38/html5/thumbnails/26.jpg)
• BLOQUE IF
IF expresión THEN …ELSE …… END IF;
![Page 27: Estructura general de un programa en el servidor de Bases de Datos](https://reader030.fdocuments.in/reader030/viewer/2022032804/56812a43550346895d8d6c38/html5/thumbnails/27.jpg)
• WHILE
WHILE expresión DO -- contenido del bucle END WHILE;
![Page 28: Estructura general de un programa en el servidor de Bases de Datos](https://reader030.fdocuments.in/reader030/viewer/2022032804/56812a43550346895d8d6c38/html5/thumbnails/28.jpg)
• REPEAT – UNTIL
REPEAT
-- CODE DEL BUCLE
UNTIL variable >= 1
END REPEAT;
![Page 29: Estructura general de un programa en el servidor de Bases de Datos](https://reader030.fdocuments.in/reader030/viewer/2022032804/56812a43550346895d8d6c38/html5/thumbnails/29.jpg)
• CASE (similar al SWITCH o SELEC CASE de algunos lenguajes de programación)
CASE variable WHEN 1 THEN -- que hacer en caso de que variable = 1 WHEN 2 THEN -- que hacer en caso de que variable = 2 WHEN x THEN -- que hacer en caso de que variable = x ELSE -- que hacer en caso de que no se presente alguno
de los casos anteriores END CASE;
![Page 30: Estructura general de un programa en el servidor de Bases de Datos](https://reader030.fdocuments.in/reader030/viewer/2022032804/56812a43550346895d8d6c38/html5/thumbnails/30.jpg)
• Ponderaciones suman 1…sino promedio=1
![Page 31: Estructura general de un programa en el servidor de Bases de Datos](https://reader030.fdocuments.in/reader030/viewer/2022032804/56812a43550346895d8d6c38/html5/thumbnails/31.jpg)
• DELIMITER //
• CREATE FUNCTION promedio_ponderado_if (numero1 float, numero2 float, numero3 float, p1 int, p2 int, p3 int) RETURNS float
• BEGIN• declare prom float;• if (p1+p2+p3)=100 then• set prom=round((numero1*p1/100+numero2*p2/100+numero3*p3/100),1);• return prom;• else • set prom=1;• return prom;• end if;• END;• //
![Page 32: Estructura general de un programa en el servidor de Bases de Datos](https://reader030.fdocuments.in/reader030/viewer/2022032804/56812a43550346895d8d6c38/html5/thumbnails/32.jpg)
• Tarea:
• Para la BD Universidad crear una función que calcule la cantidad de horas semanales de una asignatura en función de sus creditos:
• Cantidad de horas asignatura=creditos*3
![Page 33: Estructura general de un programa en el servidor de Bases de Datos](https://reader030.fdocuments.in/reader030/viewer/2022032804/56812a43550346895d8d6c38/html5/thumbnails/33.jpg)
• Tarea:
• Para la BD universidad cree una función que calcule la edad a partir de la fecha de nacimiento.
• Probar con resultados decimales.
• Probar con resultados enteros.
![Page 34: Estructura general de un programa en el servidor de Bases de Datos](https://reader030.fdocuments.in/reader030/viewer/2022032804/56812a43550346895d8d6c38/html5/thumbnails/34.jpg)
• Recursividad…una función puede llamarse a si misma…
• Sin embargo Mysql no permite llamadas recursivas.
• Tarea:
• Crear una función que calcule el factorial de un numero: 5! = 5*4*3*2*1