Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Select ... Into new. ?

Estas en el tema de Select ... Into new. ? en el foro de Mysql en Foros del Web. Otra pregunta, Dentro de un trigger estoy usando el siguiente comando pero me da un error que os pondré al final. El comando que intento ...
  #1 (permalink)  
Antiguo 25/09/2009, 04:49
 
Fecha de Ingreso: junio-2009
Mensajes: 174
Antigüedad: 14 años, 10 meses
Puntos: 0
Select ... Into new. ?

Otra pregunta,
Dentro de un trigger estoy usando el siguiente comando pero me da un error que os pondré al final. El comando que intento realizar es el siguiente:

SELECT x INTO new.columna1 FROM tablaX ...


Script line: 3 Undeclared variable: new

Para llevar a cabo esto cual es el sintaxis correcto ?

Gracias.
  #2 (permalink)  
Antiguo 25/09/2009, 05:48
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Select ... Into new. ?

NEW es una pseudovariable que solamente hace referencia los campos del registro entrante.
No funciona en ese contexto (dentro de un SELECT en un TRIGGER).
Lo que te conviene es declarar una variable al inicio de cuerpo del TRIGGER y usar esa variable para recibir el valor del SELECT, y luego usar SET para asignarlo al campo correspondiente.
Mira este ejemplo, en que lo que se hace es cargar el valor de un subitem en la tabla, al modo del detalle de una factura:
Código SQL:
Ver original
  1. DROP TRIGGER IF EXISTS SET_ITEMFACTURA;
  2. DELIMITER $$
  3. CREATE TRIGGER SET_ITEMFACTURA BEFORE INSERT
  4. ON DETALLEFACTURA
  5. FOR EACH ROW
  6. BEGIN
  7.         IF(SELECT MAX(ITEM_FACT) FROM DETALLEFACTURA WHERE FACTURA_ID=NEW.FACTURA_ID) IS NULL THEN
  8.       SET NEW.ITEM_FACT = 1;
  9.     ELSE
  10.       SET NEW.ITEM_FACT = (SELECT MAX(ITEM_FACT) FROM DETALLEFACTURA WHERE FACTURA_ID = NEW.FACTURA_ID)+1;
  11.     END IF;
  12. END$$
  13.  
  14. DELIMITER ;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:13.