1 / 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. 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.

kylynn-chen
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. 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

  3. CREATE PROCEDURE sp_name ([ parameter[ ,…] ] ) routine_body • Bloque Cabecera • Bloque de Ejecución

  4. Tipos de Programas en el lado del servidor: • Procedimientos almacenados • Funciones de Usuario. • Triggers. (se verá después)

  5. 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.

  6. 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.

  7. 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.

  8. CREATE PROCEDURE sp_name ([ parameter[ ,…] ] ) Begin Declare… … End • Bloque Cabecera • Bloque de Ejecución • Bloque de Declaracion

  9. Como se invocan??? • PROCEDURE: sentencia call • mysql> call nombre_del_procedimiento(); • FUNCTION: select • mysql> select nombre_funcion(); • TRIGGER: no se invoca

  10. 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.

  11. Funciones definidas por el usuario

  12. 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.

  13. delimiter // CREATE FUNCTION Cubo(Numero float) RETURNS float BEGIN declare cubo1 float; set cubo1=(Numero * Numero * Numero); return cubo1; END; // Si requiero utilizar esta fn… Select cubo(4),…. Select cubo(numero) from tabla

  14. 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.

  15. DELIMITER // CREATE FUNCTION promedio_normal (numero1 int, numero2 int, numero3 int) RETURNS float BEGIN declare prom float; set prom=((numero1+numero2+numero3)/3); return prom; END; // • select nota1, nota2, nota3, promedio_normal(nota1, nota2, nota3) from alumno;

  16. 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; //

  17. Notas con una decima. • Promedio de notas con una decima.

  18. DELIMITER // CREATE FUNCTION promedio_decimas (numero1 float, numero2 float, numero3 float) RETURNS float BEGIN declare prom float; set prom=round(((numero1+numero2+numero3)/3),1); return prom; END; //

  19. Crear una función que calcule el promedio ponderado de estas 3 notas (decimal). • Ponderacion: 20%, 30%, 50%

  20. DELIMITER // CREATE FUNCTION promedio_ponderado (numero1 float, numero2 float, numero3 float) RETURNS float BEGIN declare prom float; set prom=round((numero1*0.2+numero2*0.3+numero3*0.5),1); return prom; END; //

  21. Usando una ponderación cualquiera que se de en el momento.

  22. 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; //

  23. Ponderaciones suman 1… • Qué pasa si la suma de ponderaciones no suman 1??? • Qué se puede hacer?

  24. Algunas estructuras de control.

  25. BLOQUE IF IF expresión THEN … ELSE … …  END IF;

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

  27. REPEAT – UNTIL REPEAT -- CODE DEL BUCLE UNTIL variable >= 1 END REPEAT;

  28. 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;

  29. Ponderaciones suman 1…sino promedio=1

  30. 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; • //

  31. 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

  32. 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.

  33. 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

More Related