Título: TRIGGER EN ORACLE Publicado por: RULZY en 15 Junio 2011, 20:12 pm 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! Título: Re: TRIGGER EN ORACLE Publicado por: satu en 23 Junio 2011, 11:59 am 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 Título: Re: TRIGGER EN ORACLE Publicado por: kekehuete en 6 Julio 2011, 22:36 pm 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! |