Oracle - Ayuda Triggers en Oracle 11g

 
Vista:
sin imagen de perfil

Ayuda Triggers en Oracle 11g

Publicado por King (1 intervención) el 17/05/2018 18:40:46
Buenas tardes a todos,

Os consulto a ver si me podéis ayudar, estoy intentando hacer dos triggers y la verdad es que me llevo bastante tiempo volviéndome loco y no lo consigo. El motor que utilizo es Oracle Database 11g y los triggers que debo realizar son los siguientes:

Tengo las siguientes tablas:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
CREATE TABLE CLIENTES (
CODIGO NUMBER(4,0)  PRIMARY KEY,
NOMBRE VARCHAR2(30) NOT NULL,
APELLIDOS VARCHAR2(30) NOT NULL,
EDAD	NUMBER(2,0) NOT NULL
);
 
CREATE TABLE PEDIDOS (
NUM	NUMBER(5,0) PRIMARY KEY,
FECHA	DATE NOT NULL,
GASTOS_ENVIO	NUMBER(5,2),
FECHA_PREVISTA DATE NOT NULL,
TOTAL NUMBER(10,2) ,
CLIENTE NUMBER(4,0),
CONSTRAINT CLIENTES_FK FOREIGN KEY (CLIENTE) REFERENCES CLIENTES (CODIGO)
);
 
 
CREATE TABLE PRODUCTOS (
CODIGO  NUMBER(5,0) PRIMARY KEY,
NOMBRE  VARCHAR2(30) NOT NULL,
PRECIO   NUMBER(7,2) NOT NULL
);
 
CREATE TABLE  LINEAS    (
NUM NUMBER(2,0),
NUM_PEDIDO NUMBER(5,0),
PRODUCTO NUMBER(5,0) NOT NULL ,
CANTIDAD NUMBER(8,0) NOT NULL ,
IMPORTE NUMBER(6,2),
CONSTRAINT DETALLE_PK PRIMARY KEY (NUM, NUM_PEDIDO) ,
CONSTRAINT PEDIDO_FK FOREIGN KEY (NUM_PEDIDO)
REFERENCES  PEDIDOS (NUM) ,
CONSTRAINT PRODUCTO_FK FOREIGN KEY (PRODUCTO)
REFERENCES  PRODUCTOS (CODIGO)
);

Y los triggers que me pide realizar son los siguientes:

1. Cada vez que se vaya a insertar o modificar una línea de un pedido debe de actualizarse correctamente el importe de la misma (cantidad X precio del producto).

Yo he creado el siguiente trigger, pero me indica que está erróneo, por lo que algo (o todo) lo he debido de hacer mal:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
CREATE TRIGGER TRIG_UPDATE_LINEAS
AFTER INSERT OR UPDATE
ON LINEAS
FOR EACH ROW
BEGIN
   IF INSERTING THEN
      INSERT
         INTO LINEAS (IMPORTE)
         VALUES
         (CANTIDAD * (SELECT PRECIO FROM PRODUCTOS WHERE CODIGO =: NEW.PRODUCTO));
   ELSIF UPDATING THEN
     UPDATE LINEAS SET IMPORTE = (CANTIDAD * (SELECT PRECIO FROM PRODUCTOS WHERE CODIGO =: NEW.PRODUCTO));
   END IF;
END;

Respecto al segundo trigger. Este es el trigger que debo crear:

2. Cada vez que se inserten, se borren o modifiquen líneas hay que actualizar el importe del pedido correspondiente

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
CREATE TRIGGER TRIG_UPDATE_PEDIDOS
AFTER INSERT OR DELETE OR UPDATE
ON PEDIDOS
FOR EACH ROW
BEGIN
    IF INSERTING THEN
	INSERT
	INTO PEDIDOS(TOTAL)
	VALUES
UPDATE PEDIDOS SET TOTAL = (SUM (SELECT IMPORTE FROM LINEAS WHERE PEDIDOS.NUM =: NUM_PEDIDO));
    ELSIF UPDATING THEN
	INTO LINEAS(IMPORTE)
	VALUES
UPDATE PEDIDOS SET TOTAL = (SUM (SELECT IMPORTE FROM LINEAS WHERE PEDIDOS.NUM =: NUM_PEDIDO));
    ELSIF DELETING THEN
	INTO LINEAS(IMPORTE)
	VALUES
UPDATE PEDIDOS SET TOTAL = (SUM (SELECT IMPORTE FROM LINEAS WHERE PEDIDOS.NUM =: NUM_PEDIDO));
END IF;
END;

Sólo me queda daros las gracias por la ayuda y disculparme por las molestias ocasionadas. Espero poder colaborar en los foros y devolver la ayuda solicitada.

Un saludo,
King C.
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