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:
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:
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
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.
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
0