Oracle - Problemas con triggers

 
Vista:
sin imagen de perfil

Problemas con triggers

Publicado por Raúl (1 intervención) el 20/01/2016 14:56:55
Hola buenas, soy nuevo por la web, aunque llevo un tiempo (desde que estoy en la carrera) acudiendo aquí a consultar algunas dudas que me han ido surgiendo, pero esta vez no encuentro una solución y llevo desde ayer peleándome con un trigger y el sql developer además de intentando buscar ejemplos por la web. La cosa es que se supone que deberíamos llevar mañana hecho esta práctica para su correción.

Expongo mi problema. Primero el enunciado y sus tablas:

Las tablas son las siguientes:

pedidos(código, fecha, importe, cliente, notas)
- Almacena cada pedido que los clientes hacen por la web.
- Tipos: char(6), char(10), number(6,2), char(20), char(1024)
contiene(pedido, plato, precio, unidades)
- Almacena un código de pedido, cada plato en cada pedido con su precio individual y el número de
platos en total. El precio se entiende por cada unidad.
- Tipos: char(6), char(20), number(6,2), number(2,0)
auditoría(operación, tabla, fecha, hora)
- Almacena el tipo de operación sobre cada tabla, indicando la fecha y hora en que se realizó.
- Tipos: char(6), char(50), char(10), char(8)
- Sin clave primaria.

Y lo que se nos pide en este que me da problemas en concreto:

Crea y comprueba el funcionamiento de un disparador denominado trigger_pedidos
sobre la tabla pedidos de manera que se auditen los cambios producidos por inserciones,
borrados y actualizaciones. Es decir, se incluirá una fila en la tabla auditoría con el tipo de
operación realizada (INSERT, UPDATE o DELETE), el nombre de la tabla (pedidos), la
fecha y la hora. Para conseguir estos dos últimos datos se usan las funciones
to_char(sysdate,'dd/mm/yyyy') y to_char(sysdate,'hh:mi:ss')
respectivamente. Este disparador se ejecutará después de la actualización (AFTER INSERT
OR DELETE OR UPDATE) y para la tabla global (no por cada fila). Para determinar cuál es la
operación en el cuerpo del disparador se usan las comprobaciones IF INSERTING THEN o
IF DELETING THEN o IF UPDATING THEN.

He intentado modificar mil veces la sintaxis (porque creo que es un problema de sintaxis) de distintas formas y combinaciones por si era un error debido a ello, pero el log me sigue diciendo que tengo errores absurdos (del estilo que se ha encontrado en x línea un BEGIN y se esperaba ',' y cosas así). De momento lo último que he intentado compilar es este código:

create or replace
TRIGGER TRIGGER_PEDIDOS

AFTER INSERT OR DELETE OR UPDATE ON PEDIDOS

DECLARE

v_ChangeType CHAR(6);

BEGIN

IF INSERTING THEN <----aquí me dice que se ha encontrado el simbolo "updating" y esperaba otro...
v_ChangeType := 'INSERT';
END IF;

ELSIF UPDATING THEN <----aquí algo similar
v_ChangeType := 'UPDATE';
END IF;

ELSIF DELETING THEN <------ aquí le da la vena de originalidad y dice que ha encontrado ;
v_ChangeType := 'DELETE';
END IF;

INSERT INTO auditorias values(v_ChangeType, 'pedidos', to_char(sysdate, 'dd/mm/yyyy'), to_char(sysdate, 'hh:mi:ss');

END TRIGGER_PEDIDOS;

Estaría muy agradecido si alguien me pudiera ayudar con esto. Probablemente es un error tontísimo de sintaxis, pero pongo las cosas como nos han dado en los apuntes y tiene errores, pruebo con cosas más bien sacadas de internet y más de lo mismo... y ya desespera! Gracias de antemano.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder