Ver Mensaje Individual
  #5 (permalink)  
Antiguo 18/03/2007, 21:30
digdig
 
Fecha de Ingreso: marzo-2007
Mensajes: 26
Antigüedad: 17 años, 1 mes
Puntos: 0
Re: Generar Localizador Reserva con PROCEDURE

Bueno para que no quede la cosa sin terminar os cuelgo el codigo, ya probado, para generar el TRIGGER:

Código PHP:
DELIMITER $$

CREATE TRIGGER nuevareserva
BEFORE INSERT ON reserva
FOR EACH ROW

BEGIN

DECLARE locAux VARCHAR(6);

CALL generaLocalizador(@loc);
SELECT @loc INTO locAux;
SET NEW.localizadorlocAux;

END$$

DELIMITER 

Si necesitamos borrar el trigger usariamos la sentencia:
Código PHP:
DROP trigger nuevareserva

Finalmente para que veais que no miento cuando digo que funciona os pongo las salidas al insertar dos nuevas reservas (comprador y crucero son los identificadores de los respectivos registros en otras tablas):
Código PHP:
mysqlinsert into reserva (compradorcrucerovalues (3432123);
Query OK1 row affected1 warning (0.01 sec)

mysqlselect from reserva;
+-------------+-----------+---------+
localizador comprador crucero |
+-------------+-----------+---------+
HNW32L      |      3432 |     123 
+-------------+-----------+---------+
1 row in set (0.00 sec)

mysqlinsert into reserva (compradorcrucerovalues (3563165);
Query OK1 row affected1 warning (0.00 sec)

mysqlselect from reserva;
+-------------+-----------+---------+
localizador comprador crucero |
+-------------+-----------+---------+
HNW32L      |      3432 |     123 
SP4A8S      |      3563 |     165 
+-------------+-----------+---------+
2 rows in set (0.00 sec
RESUMEN:
Necesitabamos que mysql generara automáticamente localizadores aleatorios formados por caracteres y dígitos. La tendencia de los programadores es delegar esta función en la aplicación cliente, sin embargo, el correcto uso de procedure y trigger permite al usuario de la base datos abstraerse de esta tarea con las ventajas que eso supone.
La solución que hemos optado es crear un procedimiento que concatena caracteres recuperados aleatoriamente de una tabla auxiliar rellena de los 36 caracteres del localizador. Con el disparador before insert lo que hacemos es llamar al procedimiento para obtener un localizador válido y usarlo para almacenarlo en el campo localizador de cada fila insertada.

Un saludo a todos

Jorge F.M. (Calico UAX)