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!
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
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!