Ver Mensaje Individual
  #2 (permalink)  
Antiguo 25/09/2009, 05:48
Avatar de gnzsoloyo
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)