Sei sulla pagina 1di 3

Universidad Autnoma Toms Fras Ingeniera Informtica

Laboratorio de Base de Datos INF-553


Docente.. Ing. Orlando Choque Ayma
Auxiliar. Univ. Reynaldo Henry Ruiz Cruz
PROGRAMACIN MySQL
Funciones:
MySQL tiene una multitud de funciones tales como CONCAT( ), LENGTH( ), etc. que podemos usar al
momento de trabajar en este sistema de gestin de base de datos, tambin podemos crear nuestras propias
funciones (funciones definidas por el usuario (UDF)), utilizando sentencias repetitivas, selectivas, etc.

Sintaxis bsica:

CREATE FUNCTI ON nombre_funcion(parametro1 tipo_parametro,, parametroN tipo_parametroN)
RETURNS tipo_retorno //tipo del valor que retornar la funcin
[DETERMINISTIC]
BEGI N //inicio del cuerpo de la funcin
DECLARE variable1 tipo_variable1; //declaracin de variables
DECLARE variableN tipo_variableN;
...

RETURN valor_o_variable_de_retorno; //valor que retorna la funcin
END; //fin del cuerpo de la funcin

Asignacin:

SET variable=valor_variable; //asignacin

Sentencias repetitivas:

WHI LE condicion DO //sentencia repetitiva WHILE
sentencias;
END WHI LE;

Sentencias selectivas:

I F condicion THEN //sentencia selectiva IF
sentencias;
END I F;





EJEMPLOS:
1.- Realizar una funcin para calcular la suma de los N primeros nmeros.
mysql> DELIMITER $
mysql> CREATE FUNCTION sumar(n int) returns int
-> BEGIN
-> DECLARE contador, s int;
-> SET contador=0;
-> SET s=0;
-> WHILE contador < n DO
-> SET contador=contador+1;
-> SET s=s+contador;
-> END WHILE;
-> RETURN s;
-> END;
-> $
Query OK, 0 rows affected (0.00 sec)
NOTA: Antes de empezar a realizar nuestras funciones debemos cambiar el delimitador que MySQL trae por defecto
( ; ), eso lo realizamos de la siguiente manera: DELIMITER smbolo
Ej: delimiter $ //cambiamos el punto y coma ( ; ) por el smbolo $ (puede ser cualquier smbolo)
Con esto cambiamos temporalmente el delimitador de MySQL, ahora podemos empezar a crear nuestras funciones.

Universidad Autnoma Toms Fras Ingeniera Informtica
Laboratorio de Base de Datos INF-553
Docente.. Ing. Orlando Choque Ayma
Auxiliar. Univ. Reynaldo Henry Ruiz Cruz
Una vez creada la funcin la ejecutamos, para eso realizamos lo siguiente:

SELECT nombre_de_la_funcin ();

Para el ejemplo anterior seria:
mysql> select sumar(5)$
+----------+
| sumar(5) |
+----------+
| 15 |
+----------+
1 row in set (0.00 sec)

mysql> select sumar(4)$
+----------+
| sumar(4) |
+----------+
| 10 |
+----------+
1 row in set (0.02 sec)

Una vez hecho esto podemos volver a cambiar nuestro delimitador a ( ; ).

mysql> DELIMITER $

2.- Realizar una funcin para determinar si un estudiante es mayor de edad o no, dado el CI del
estudiante, si la edad es mayor a 17 es mayor de edad caso contrario no.

Para realizar esta funcin requerimos:
Crear tabla estudiante(ci, nombre, edad):

mysql> create table estudiante(
-> ci numeric(8) primary key,
-> nombre varchar(50),
-> edad int);
Query OK, 0 rows affected (0.17 sec)

Insertamos datos a la tabla:
mysql> insert into estudiante values(10,'juan',25),(11,'pedro',17);
Query OK, 2 rows affected (0.06 sec)
Records: 2 Duplicates: 0 Warnings: 0

mysql> insert into estudiante values(12,'ana',18),(13,'luis',20);
Query OK, 2 rows affected (0.03 sec)
Records: 2 Duplicates: 0 Warnings: 0

Verificando:

mysql> select * from estudiante$
+----+--------+------+
| ci | nombre | edad |
+----+--------+------+
| 10 | juan | 25 |
| 11 | pedro | 17 |
| 12 | ana | 18 |
| 13 | luis | 20 |
+----+--------+------+
4 rows in set (0.05 sec)
Universidad Autnoma Toms Fras Ingeniera Informtica
Laboratorio de Base de Datos INF-553
Docente.. Ing. Orlando Choque Ayma
Auxiliar. Univ. Reynaldo Henry Ruiz Cruz
La funcin seria de la siguiente manera:
mysql> delimiter $
mysql> create function mayor_menor(bci numeric) returns varchar(50)
-> begin
-> declare ed int;
-> select edad into ed from estudiante where ci=bci;
-> if ed >= 18 then
-> return "ES MAYOR DE EDAD";
-> else
-> return "NO ES MAYOR DE EDAD";
-> end if;
-> end;
-> $
Query OK, 0 rows affected (0.00 sec)

Para ejecutar la funcin con los datos anteriormente introducidos:
mysql> select * from estudiante$
+----+--------+------+
| ci | nombre | edad |
+----+--------+------+
| 10 | juan | 25 |
| 11 | pedro | 17 |
| 12 | ana | 18 |
| 13 | luis | 20 |
+----+--------+------+
4 rows in set (0.05 sec)

mysql> select mayor_menor(10)$
+------------------+
| mayor_menor(10) |
+------------------+
| ES MAYOR DE EDAD |
+------------------+
1 row in set (0.00 sec)

mysql> select mayor_menor(11)$
+---------------------+
| mayor_menor(11) |
+---------------------+
| NO ES MAYOR DE EDAD |
+---------------------+
1 row in set (0.00 sec)
...
mysql> delimiter ;


Si por alguna razn tendramos que borrar una de nuestras funciones se hara de la siguiente manera:
DROP FUNCTION nombre_de_la_funcin;

Si queremos borrar las funciones que creamos anteriormente seria:
mysql> DROP FUNCTION sumar;
Query OK, 0 rows affected (0.00 sec)

mysql> DROP FUNCTION mayor_menor;
Query OK, 0 rows affected (0.00 sec)

Potrebbero piacerti anche