Upload
kylynn-chen
View
27
Download
2
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
• 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
CREATE PROCEDURE sp_name ([ parameter[ ,…] ] )
routine_body
• Bloque Cabecera
• Bloque de Ejecución
• Tipos de Programas en el lado del servidor:
• Procedimientos almacenados
• Funciones de Usuario.
• Triggers. (se verá después)
• 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.
• 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.
• 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.
CREATE PROCEDURE sp_name ([ parameter[ ,…] ] )
Begin
Declare…
…
End
• Bloque Cabecera• Bloque de Ejecución• Bloque de Declaracion
• Como se invocan???
• PROCEDURE: sentencia call• mysql> call nombre_del_procedimiento();
• FUNCTION: select• mysql> select nombre_funcion();
• TRIGGER: no se invoca
• 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.
• Funciones definidas por el usuario
• 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.
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
• 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.
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;
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;
//
• Notas con una decima.
• Promedio de notas con una decima.
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;//
• Crear una función que calcule el promedio ponderado de estas 3 notas (decimal).
• Ponderacion: 20%, 30%, 50%
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;//
• Usando una ponderación cualquiera que se de en el momento.
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;
//
• Ponderaciones suman 1…
• Qué pasa si la suma de ponderaciones no suman 1???
• Qué se puede hacer?
• Algunas estructuras de control.
• BLOQUE IF
IF expresión THEN …ELSE …… END IF;
• WHILE
WHILE expresión DO -- contenido del bucle END WHILE;
• REPEAT – UNTIL
REPEAT
-- CODE DEL BUCLE
UNTIL variable >= 1
END REPEAT;
• 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;
• Ponderaciones suman 1…sino promedio=1
• 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;• //
• 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
• 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.
• 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