You are on page 1of 5

//****************************************************

Juan Osio
26715734
Informatica
Trayecto IV

Tablas necesarias

//****************************************************

CREATE TABLE public.grados


(
cod_grad numeric NOT NULL,
des_gra text COLLATE pg_catalog."default",
CONSTRAINT grados_pkey PRIMARY KEY (cod_grad)
);

CREATE TABLE public.vehiculo


(
placa numeric,
marca text,
PRIMARY KEY (placa),
CONSTRAINT placa UNIQUE (placa)

);

CREATE TABLE public.materias


(
cod_mat numeric NOT NULL,
des_mat text COLLATE pg_catalog."default",
CONSTRAINT materias_pkey PRIMARY KEY (cod_mat)
);

CREATE TABLE public.conductor


(
cedula numeric NOT NULL,
nombre text COLLATE pg_catalog."default",
placa numeric,
CONSTRAINT cedula_pk PRIMARY KEY (cedula),
CONSTRAINT cedula UNIQUE (cedula),
CONSTRAINT placa FOREIGN KEY (placa)
REFERENCES public.vehiculo (placa) MATCH SIMPLE
ON UPDATE NO ACTION
ON DELETE NO ACTION
NOT VALID
);

CREATE TABLE public.consolidado


(
cant_t_pal numeric,
cant_t_lib numeric,
cod_gra numeric,
cod_mat numeric
);

CREATE TABLE public.recepcion_m


(
nrodocrec numeric NOT NULL,
fecha_rec date,
cant_paletas numeric,
hor_ini_des time without time zone,
hor_fin_des time without time zone,
nota_entrega numeric,
cedula numeric,
placa numeric,
cod_gra_anno numeric,
cod_cia numeric,
CONSTRAINT nrodocrec_pk PRIMARY KEY (nrodocrec),
CONSTRAINT cedula FOREIGN KEY (cedula)
REFERENCES public.conductor (cedula) MATCH SIMPLE
ON UPDATE NO ACTION
ON DELETE NO ACTION
NOT VALID
);

CREATE TABLE public.recepcion_d


(
nrodocrec numeric,
item numeric NOT NULL,
can_pal numeric,
can_lib numeric,
nro_alm numeric,
cod_gra numeric,
cod_mat numeric,
CONSTRAINT recepcion_d_pkey PRIMARY KEY (item)
);

//****************************************************

Insertar valores dentro de las tablas

//****************************************************

INSERT INTO public.grados (cod_grad, des_gra) VALUES


(1, 'Primer grado'),
(2, 'Segundo grado'),
(3, 'Tercer Grado'),
(4, 'Cuarto Grado'),
(5, 'Quinto grado'),
(6, 'Sexto grado');

INSERT INTO public.materias (cod_mat, des_mat) VALUES


(8, 'Ciencias sociales'),
(9, 'Naturaleza'),
(10, 'Historia de Venezuela'),
(11, 'Geografia'),
(12, 'Matematica'),
(13, 'Algebra');

INSERT INTO public.vehiculo (placa, marca) VALUES


(541872, 'Chevrolet'),
(754215, 'Pontiac'),
(841245, 'Ford'),
(854625, 'TruckMonster'),
(862597, 'MarcoPolo'),
(986475, 'Charger');

INSERT INTO public.conductor (cedula, placa, nombre) VALUES


(8346298, 986475, 'Robert Fernandez'),
(8742669, 754215, 'Luis Enrique'),
(12856478, 841245, 'Claudio Marquez'),
(18976174, 754215, 'Frank Rossel'),
(102489556, 986475, 'Nobita Bartomeu'),
(214985621, 854625, 'Ernesto Valverde');

INSERT INTO public.recepcion_m(nrodocrec, fecha_rec, cant_paletas, hor_ini_des,


hor_fin_des, nota_entrega, cedula, placa, cod_gra_anno, cod_cia) VALUES
(192, now(), 2, '12:00:00', '03:00:00', 453, 18976174, 43424, 1, 5),
(188, now(), 5, '09:00:00', '05:00:00', 243, 12856478, 65747, 2, 6),
(317, now(), 7, '03:00:00', '07:00:00', 865, 8742669, 97575, 3, 7),
(314, now(), 9, '11:00:00', '04:00:00', 904, 8346298, 12414, 4, 8);

INSERT INTO public.recepcion_d (nrodocrec, item, can_pal, can_lib, nro_alm,


cod_gra, cod_mat) VALUES
(192, 1, 6, 845, 32, 3, 13),
(188, 2, 3, 127, 24, 2, 13),
(317, 3, 9, 45, 145, 5, 12),
(314, 4, 2, 26, 6874, 4, 12);

//*********************************************************************************
***********************

Funcion que Cada vez que se insertan datos en la tabla


recepcion_d se actualiza en consolidado y Si el producto existe se suma
y si no
existe se crea

//*********************************************************************************
***********************

CREATE FUNCTION auditar_recepcion()


RETURNS TRIGGER AS $auditar_recepcion$
BEGIN
IF(TG_OP = 'INSERT') THEN
--Evaluo si existe o no existe el item que estoy insertando
IF NOT EXISTS (SELECT item FROM public.recepcion_d WHERE item = NEW.item)
THEN
--No existe, inserto
INSERT INTO public.recepcion_d(nrodocrec, item, can_pal, can_lib,
nro_alm, cod_gra, cod_mat)
VALUES(NEW.nrodocrec, NEW.item, NEW.can_pal, NEW.can_lib, NEW.nro_alm,
NEW.cod_gra, NEW.cod_mat);
ELSE
--Si existe, actualizo
UPDATE public.recepcion_d
SET can_pal = can_pal + NEW.can_pal, can_lib = can_lib + NEW.can_lib
WHERE item = NEW.item;
END IF;
--Inserto en consolidado cada que intenta ocurrir una insercin
INSERT INTO public.consolidado(cant_t_pal, cant_t_lib, cod_gra,
cod_mat)
VALUES(NEW.can_pal, NEW.can_lib, NEW.cod_gra, NEW.cod_mat);
END IF;
RETURN OLD;

END;
$auditar_recepcion$ LANGUAGE 'plpgsql';

//****************************************************

Asociaci�n del trigger con la funci�n

//****************************************************

CREATE TRIGGER auditar_recepcion_d


BEFORE INSERT ON recepcion_d
FOR EACH ROW WHEN (pg_trigger_depth() = 0) --evitando la recursividad
al insertar
EXECUTE PROCEDURE auditar_recepcion();

//*********************************************************************************
***********************

Al momento de realizar la practica estos son los valores que se pueden


insertar
Debido a que son tablas relacionadas, si no se pretenden usar estos valores
tendras que insertar nuevas tuplas en la tabla grados, materias y recepcion_m

//*********************************************************************************
***********************

nrodocrec cod_grad cod_mat


188 1 8
192 2 9
214 3 10
217 4 11
314 5 12
317 6 13

//*********************************************************************************
***********************

Comando para probar el ejercicio 1:


Ya existe la tupla con el item 4; Esta tiene 2 paletas(can_pal) y 26
libros(can_lib)
al ejecutar el siguiente comando, como el item ya existe lo que sucedera es
que se va a sumar
a lo que ya tiene quedando asi: El item 4 con 10 paletas(can_pal) y 50
libros(can_lib),
adicional a eso se guardara esa nueva insercion en la tabla consolidado

//*********************************************************************************
***********************

INSERT INTO public.recepcion_d(


nrodocrec, item, can_pal, can_lib, nro_alm, cod_gra, cod_mat)
VALUES (188, 4, 8, 24, 432, 4, 7);

//*********************************************************************************
***********************

Comando para probar el ejercicio 2:


Este comando tan solo insertara una nueva tupla ya que el item no existe y
procedera tambien a
guardarse en la tabla consolidado

//*********************************************************************************
***********************
INSERT INTO public.recepcion_d(
nrodocrec, item, can_pal, can_lib, nro_alm, cod_gra, cod_mat)
VALUES (214, 9, 100, 200, 3421, 6, 12);

You might also like