Webdev:
Tengo una tabla que incluye los estudiantes siguientes campos
Student_Id int primary key
student_name varchar(50)
seat_number varchar(50)
level_id int foreign key
CREATE TABLE `students` (
`Student_Id` int(11) NOT NULL AUTO_INCREMENT,
`student_name` varchar(100) DEFAULT NULL,
`level_id` int(11) DEFAULT NULL,
`seat_number` varchar(50) DEFAULT NULL,
KEY `Relationship17` (`level_id`),
CONSTRAINT `Relationship17` FOREIGN KEY (`level_id`) REFERENCES `levels` (`Level_Id`) ON DELETE CASCADE ON UPDATE CASCADE)
Mi meta
Para establecer los valores únicos para el campo seat_number mediante consulta
FLOOR(rand() * 90000 + 10000)
Y luego a concat el resultado a un personaje basado en el valor de level_id.
Así que creo activador siguiente:
DELIMITER $$
CREATE TRIGGER seat_nu_trigger BEFORE INSERT ON students FOR EACH ROW
BEGIN
DECLARE x CHARACTER;
DECLARE cur cursor for select FLOOR(rand() * 90000 + 10000) from students;
open cur;
if NEW.level_id=1 THEN
set x = 'A';
ELSEIF
NEW.level_id=2 THEN
set x = 'B';
END IF;
getSeatNumber: LOOP
SET NEW.seat_number = concat(x,FLOOR(rand() * 90000 + 10000) );
END LOOP getSeatNumber;
CLOSE cur;
END;
El problema
Al insertar los datos a mi mesa no se inserta y la consulta tarda un tiempo ilimitado.
No puedo soltar el gatillo.
akina:
CREATE TRIGGER seat_nu_trigger
BEFORE INSERT
ON students
FOR EACH ROW
SET NEW.seat_number = CONCAT(CASE NEW.level_id WHEN 1 THEN 'A'
WHEN 2 THEN 'B'
END, FLOOR(rand() * 90000 + 10000) );
PS-1. Si level_id
se establece en alguna que no sea A
ni B
entonces seat_number
será NULL.
PS-2. seat_number
longitud será variable. Piense en adicional LPAD()
.
PS-3. seat_number
singularidad no está garantizada.