Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Freddy Condori
EJEMPLO PROCEDIMIENTO
delimiter // CREATE PROCEDURE procedimiento1 (OUT variable1 INT) BEGIN SELECT COUNT(*) INTO variable1 FROM persona; END // delimiter ;
Probar el Procedimiento:
CALL funcion1(@a); SELECT @a;
EJEMPLO FUNCION
delimiter // CREATE FUNCTION hola (s CHAR(20)) RETURNS CHAR(50) RETURN CONCAT(Hola ',s,'!'); // delimiter; Probar la Funcion: SELECT hola(mundo');
LA SENTENCIA CALL
CALL sp_name([parameter[,...]])
El comando CALL invoca un procedimiento definido previamente con CREATE PROCEDURE. CALL puede pasar valores al llamador usando parmetros declarados como OUT o INOUT . Tambin retorna el nmero de registros afectados.
SENTENCIA DECLARE
El comando DECLARE se usa para definir varios iconos locales de una rutina: las variables locales, condiciones y handlers y cursores. Los comandos SIGNAL y RESIGNAL no se soportan en la actualidad. DECLARE puede usarse slo dentro de comandos compuestos BEGIN ... END y deben ser su inicio, Antes de cualquier otro comando. Los cursores deben declararse antes de declarar los handlers, y las variables y condiciones deben declararse antes de declarar los cursores o handlers.
DECLARE CONDITIONS
DECLARE condition_name CONDITION FOR condition_value
Este comando especifica condiciones que necesitan tratamiento especfico. Asocia un nombre con una condicin de error especfica. El nombre puede usarse subsecuentemente en un comando DECLARE Adems de valores SQLSTATE , los cdigos de error MySQL se soportan.
DECLARE HANDLERS
DECLARE handler_type HANDLER FOR condition_value[,...] sp_statement
Este comando especifica handlers que pueden tratar una o varias condiciones. Si una de estas condiciones ocurren, el comando especificado se ejecuta. Para un handler CONTINUE , contina la rutina actual tras la ejecucin del comando del handler. Para un handler EXIT , termina la ejecucin del comando compuesto BEGIN...END actual.
CURSORES
Se soportan cursores simples dentro de procedimientos y funciones almacenadas. La sintaxis es la de SQL empotrado. Los cursores no son sensibles, son de slo lectura, y no permiten scrolling. No sensible significa que el servidor puede o no hacer una copia de su tabla de resultados. Los cursores deben declararse antes de declarar los handlers, y las variables y condiciones deben declararse antes de declarar cursores o handlers.
DECLARAR CURSORES
DECLARE cursor_name CURSOR FOR select_statement
Este comando declara un cursor. Pueden definirse varios cursores en una rutina, pero cada cursor en un bloque debe tener un nombre nico. El comando SELECT no puede tener una clusula INTO .
LA SENTENCIA IF
Sentencia IF
IF search_condition THEN statement_list [ELSEIF search_condition THEN statement_list] ... [ELSE statement_list] END IF
IF implementa un constructor condicional bsico. Si search_condition se evala a cierto, el comando SQL correspondiente listado se ejectua. Si no coincide ninguna search_condition se ejecuta el comando listado en la clusula ELSE. statement_list puede consistir en varios comandos.
LA SENTENCIA CASE
La sentencia CASE
CASE case_value WHEN when_value THEN statement_list [WHEN when_value THEN statement_list] ... [ELSE statement_list] END CASE O: CASE WHEN search_condition THEN statement_list [WHEN search_condition THEN statement_list] ... [ELSE statement_list] END CASE
LA SENTENCIA CASE(2)
El comando CASE para procedimientos almacenados implementa un constructor condicional complejo. Si una search_condition se evala a cierto, el comando SQL correspondiente se ejecuta. Si no coincide ninguna condicin de bsqueda, el comando en la clusula ELSE se ejecuta. .
LA SENTENCIA LOOP
Sentencia LOOP [begin_label:] LOOP statement_list END LOOP [end_label] LOOP implementa un constructor de bucle simple que permite ejecucin repetida de comandos particulares. El comando dentro del bucle se repite hasta que acaba el bucle, usualmente con un comando LEA-VE
LA SENTENCIA LEAVE
LEAVE label Este comando se usa para abandonar cualquier control de flujo etiquetado. Puede usarse con BEGIN... END o bucles.
LA SENTENCIA ITERATE
ITERATE label
ITERATE slo puede aparecer en comandos LOOP, REPEAT, y WHILE . ITERATE significa vuelve a hacer el bucle. vease el ejemplo ejemplo_iterate
LA SENTENCIA REPEAT
[begin_label:] REPEAT statement_list UNTIL search_condition END REPEAT [end_label] El comandos dentro de un comando REPEAT se repite hasta que la condicin search_condition es cierta. Un comando REPEAT puede etiquetarse. end_label no puede darse a no ser que begin_label est presente, y si lo estn, deben ser el mismo. vease ejemplo_repeat
LA SENTENCIA WHILE
[begin_label:] WHILE search_condition DO statement_list END WHILE [end_label] El comando dentro de un comando WHILE se repite mientras la condicin search_condition es cierta. Un comando WHILE puede etiquetarse. end_label no puede darse a no ser que begin_label tambin est presente, y si lo estn, deben ser el mismo. vease ejemplo_while
TRIGERS (DISPARADORES)
Una de las principales caractersticas que han sido incorporadas en la versin 5.0 de MySQL es algo llamado "Triggers". Los triggers son objetos relacionados a tablas que son ejecutados o mostrados cuando sucede algn evento en contra de sus tablas asociadas. Estos eventos son aquellas sentencias (INSERT, DELETE, UPDATE) que modifican los datos dentro de la tabla a la que est asociado el trigger y pueden ser disparados antes (BEFORE) y/o despus (AFTER) de que la fila es modificada.
TRIGERS(2)
Los triggers son muy parecidos a los procedimientos almacenados, de tal forma que si deseamos ejecutar mltiples acciones cuando un trigger es disparado, podemos encapsular estas acciones dentro de una construccin BEGIN, END. Los triggers tienen un par de palabras clave extra OLD y NEW las cuales se refieren respectivamente a los valores de las columnas antes y despus de que la sentencia fue procesada. Las sentencias INSERT nicamente permiten NEW, las sentencias UPDATE permiten ambos, NEW y OLD, y las sentencias DELETE permiten slo OLD. La razn para esto debe ser obvia.
EJEMPLO
Se va ha crear una tabla clientes. Se va ha crear una tabla auditoria_clientes. Por ultimo se va ha crear un triger que se ejecute cada vez que se actualice un valor de la tabla clientes, y lo que hace este triger es insertar un registro en la tabla auditoria_clientes con el nombre de usuario que realizo la modificacin, y la fecha de la modificacin.
EJEMPLO cont.
Se ejecuta el archivo ejemplo1_triger.sql (crear las tablas inserta valores y crea el triger) Vemos el contenido de la tabla clientes y la tabla auditoria_clientes Probamos el triger ejecutando una modificacion: UPDATE clientes SET ejecutivo_cuenta='Mario' WHERE nombre='Acme; Vemos el contenido de la tabla auditoria_clientes;
EJEMPLO2
Una cosa importante que se debe mencionar es que dentro los triger se puede llamar a funciones Vamos a crear una tabla para el registro de todas las ventas Vamos a crear un procedimiento para fijar el porcentaje de comisin para la gente basada en la venta. Vamos a crear un trigger que llama al procedimiento y fija la comisin despus de la insercin a la tabla ventas
EJEMPLO2 TRIGER
CREATE PROCEDURE comision(valor DECIMAL(9,2)) BEGIN SET @comm := valor / 10; -> END; CREATE TRIGGER ventas_comm BEFORE INSERT ON ventas FOR EACH ROW BEGIN CALL comision(NEW.valor); -> SET NEW.comision = @comm; END;
EJEMPLO2
Lo que tenemos que hacer es probar el triger insertando valores en la tabla ventas: INSERT INTO ventas(item, valor, ejecutivo_cuenta) VALUES('Queso',300.00,'Mario'); INSERT INTO ventas(item, valor, ejecutivo_cuenta) VALUES('Papas',400.00,'Mario'); Vemos el contenido de la tabla ventas