TRIGGER EN ORACLE

Iniciado por RULZY, 15 Junio 2011, 20:12 PM

0 Miembros y 1 Visitante están viendo este tema.

RULZY

HOLA ESTOY TENIENDO PROBLEMITAS POSIBLEMENTE DE SINTAXIS CON UN TRIGGER EN ORACLE

LO QUE TENGO QUE HACER ES QUE CUANDO SE MODIFIQUE LA TABLA "GENERADORES" SE CREE UN REGISTRO EN LA TABLA "MANTENIMIENTO" CON GUARDANDO LA DESCRIPCION CON EL TEXTO  ANTIGUA CAPACIDAD:‟ + CAPACIDAD VIEJA +  NUEVA CAPACIDAD:‟ + CAPACIDAD NUEVA

NO SE SI ES UN PRBLEMA DE CONCATENAS O QUE, PERO ME SALTA ERROR AL MOMENTO DE COMPILARLO:



TRIGGER TG_PUNTO_B AFTER UPDATE ON GENERADORES 
BEGIN

INSERT INTO MANTENIMIENTO (numMant, codGen, fchMant, dscMant)
VALUES (seq_numMant.NextVal, :new.codGen, SYSDATE, 'Antigua capacidad: ' :old.KWGEN ' Nueva capacidad: ' :new.KWGEN);

END;





Error que empieza en la línea 1 del comando:
TRIGGER TG_PUNTO_B AFTER UPDATE ON GENERADORES 
Informe de error:
Comando desconocido
La variable de enlace "new" no está declarada
bloque anónimo terminado



HELP!



satu

Hola

Lo primero de todo decirte que no escribas en mayúsculas, léete las normas

Acabo de leer esto que creo que soluciona tu problema

Citar
Por defecto todos los disparadores son de tipo for each statement, de manera que se ejecutan una sola vez, antes o después de la instrucción que lanza su ejecución. Existen dos variables externas old y new que almacenan respectivamente los valores de cada tupla antes y después de ejecutar sobre ella la instrucción que lanza al disparador. Sin embargo, estas variables solamente se pueden utilizar cuando se escoge la opción de ejecutar el disparador una vez por cada tupla (for each row), es decir ejecutarlo separadamente para cada una de las tuplas afectadas por la instrucción SQL que ha activado al disparador. En este caso la cláusula optativa WHEN sirve para especificar una condición adicional que debe cumplir una tupla afectada por el disparador para que éste sea ejecutado sobre ella.

Saludos
Breakbeat como forma de vida

kekehuete

seria algo asi:

CREATE OR REPLACE TRIGGER TG_PUNTO_B
  AFETER UPDATE ON generadores
  FOR EACH ROW
BEGIN

  BEGIN
     INSERT
       INTO mantenimiento (numMant, codGen, fchMant, dscMant)
     VALUES (seq_numMant.NextVal, :new.codGen, SYSDATE, 'Antigua capacidad: ' :old.KWGEN ' Nueva capacidad: ' :new.KWGEN);
  EXCEPTION
     WHEN OTHERS THEN
       Raise_Application_Error(-20000, 'Error al actualizar ' || SQLERRM);
  END;
 
END;

Saludos!