Las funciones son muy similares a los Stored Procedures (SP), la diferencia radica en algunos detalles, siendo la principal que solo retornan un valor, cuando un SP puede retornar más de uno, adicionalmente no necesitamos una variable para almacenar el valor que resulta por lo que es mucho más fácil de utilizar dentro de un SELECT.
- El Query Box, donde podremos escribir la función.
- El cambio del delimitador.
- El mecanismo de edición y manipulación de la función.
Veamos cómo definir una función a través de un ejemplo:
CREATE FUNCTION get_country_name(param_country_code CHAR(2)) RETURNS VARCHAR(50) READS SQL DATA BEGIN DECLARE var_country_name VARCHAR(50) DEFAULT 'not found'; SELECT description FROM country WHERE code = param_country_code INTO var_country_name; RETURN var_country_name; END //Como vemos la sintaxis es muy similar a aquella de los SP, solo que acá no definimos los valores de IN y OUT si no que definimos los parámetros que ingresan y declaramos un solo valor que será el RETURN.
Cuando vamos al apartado de Routines en la página estructura en la Base de Datos la veremos reflejada de la siguiente forma:
Luego que tenemos nuestra función creada, veamos cómo podemos probarla, esta función que utilizamos de prueba lo que hace es consultar contra una tabla de países y devolver el nombre de un país cuando preguntamos por un código, en caso de no encontrarlo nos devuelve not found:
SELECT CONCAT('ca->', get_country_name('ca'), ', zz->', get_country_name('zz')) as test;Simplemente hacemos un select con un CONCAT de forma de unir los resultados en una cadena y obtendremos lo siguiente:
ca->Canada, zz->not foundComo vemos es mucho más sencillo que construir los query que consultaran cada país por separado.
Veamos cómo crear un Trigger:
CREATE TRIGGER after_book_insert AFTER INSERT ON book FOR EACH ROW BEGIN UPDATE author SET total_page_count = total_page_count + NEW.page_count WHERE id = NEW.author_id; END //Como podemos ver igualmente tenemos que definir un nuevo delimitador // dentro del query box para que podamos incluir todas las instrucciones del Trigger, en el caso del ejemplo lo vinculamos en el After Insert es decir luego de hacer una inserción y luego ejecutamos la acción definida, esto ayuda a que la Base de Datos de forma autónoma pueda gestionar acciones al momento que sucedan.
Una vez creado el Trigger al ir a la página de estructura de la tabla lo veremos disponible:
Buenisimo como siempre, GRACIAS;)