34
• Estructura general de un programa en el servidor de Bases de Datos

Estructura general de un programa en el servidor de Bases de Datos

Embed Size (px)

DESCRIPTION

Estructura general de un programa en el servidor de Bases de Datos. 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. - PowerPoint PPT Presentation

Citation preview

Page 1: Estructura general de un programa en el servidor de Bases de Datos

• 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

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

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

• 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

• 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
Page 7: Estructura general de un programa en el servidor de Bases de Datos

• 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

• 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

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

• 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

• 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

• Funciones definidas por el usuario

Page 13: Estructura general de un programa en el servidor de Bases de Datos

• 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

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

• 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

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

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

• Notas con una decima.

• Promedio de notas con una decima.

Page 19: Estructura general de un programa en el servidor de Bases de Datos

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

• 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

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

• 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

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

• 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

• Algunas estructuras de control.

Page 26: Estructura general de un programa en el servidor de Bases de Datos

• BLOQUE IF

IF expresión THEN …ELSE …… END IF;

Page 27: Estructura general de un programa en el servidor de Bases de Datos

• WHILE

WHILE expresión DO    -- contenido del bucle END WHILE;

Page 28: Estructura general de un programa en el servidor de Bases de Datos

• 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

• 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

• Ponderaciones suman 1…sino promedio=1

Page 31: Estructura general de un programa en el servidor de Bases de Datos

• 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

• 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

• 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

• 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