estructura general de un programa en el servidor de bases de datos

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

Upload: kylynn-chen

Post on 30-Dec-2015

23 views

Category:

Documents


2 download

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

TRANSCRIPT

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