Вы находитесь на странице: 1из 11

-- Tarea n� 11 --

drop table auditoria;

- Ejercicio 1

CREATE DATABASE fpsystem


WITH OWNER = postgres
ENCODING = 'UTF8'
TABLESPACE = pg_default
LC_COLLATE = 'Spanish_Paraguay.1252'
LC_CTYPE = 'Spanish_Paraguay.1252'
CONNECTION LIMIT = -1;

- Ejercicio 2

CREATE TABLE public.clientes


(
idcli integer NOT NULL DEFAULT nextval('clientes_idcli_seq'::regclass),
codigocli character varying,
idpercli integer,
CONSTRAINT clientes_pkey PRIMARY KEY (idcli),
CONSTRAINT clientes_idpercli_fkey FOREIGN KEY (idpercli)
REFERENCES public.clientes (idcli) MATCH SIMPLE
ON UPDATE RESTRICT ON DELETE RESTRICT
)
WITH (
OIDS=FALSE
);
ALTER TABLE public.clientes
OWNER TO postgres;

CREATE TABLE public.empleados


(
idemp integer NOT NULL DEFAULT nextval('empleados_idemp_seq'::regclass),
codigoemp character varying,
salarioemp numeric(15,0),
idperemp integer,
CONSTRAINT empleados_pkey PRIMARY KEY (idemp),
CONSTRAINT empleados_idperemp_fkey FOREIGN KEY (idperemp)
REFERENCES public.empleados (idemp) MATCH SIMPLE
ON UPDATE RESTRICT ON DELETE RESTRICT,
CONSTRAINT empleados_codigoemp_key UNIQUE (codigoemp)
)
WITH (
OIDS=FALSE
);
ALTER TABLE public.empleados
OWNER TO postgres;

CREATE TABLE public.empleados_proyectos


(
idemppro integer NOT NULL DEFAULT
nextval('empleados_proyectos_idemppro_seq'::regclass),
idemp integer,
idpro integer,
CONSTRAINT empleados_proyectos_pkey PRIMARY KEY (idemppro),
CONSTRAINT empleados_proyectos_idemp_fkey FOREIGN KEY (idemp)
REFERENCES public.empleados (idemp) MATCH SIMPLE
ON UPDATE RESTRICT ON DELETE RESTRICT,
CONSTRAINT empleados_proyectos_idpro_fkey FOREIGN KEY (idpro)
REFERENCES public.empleados_proyectos (idemppro) MATCH SIMPLE
ON UPDATE RESTRICT ON DELETE RESTRICT
)
WITH (
OIDS=FALSE
);
ALTER TABLE public.empleados_proyectos
OWNER TO postgres;

CREATE TABLE public.personas


(
idper integer NOT NULL DEFAULT nextval('personas_idper_seq'::regclass),
codigoper character varying,
documentoper character varying,
nombreper character varying,
apellidoper character varying,
direccionper character varying,
ciudadper character varying,
telefonoper character varying,
CONSTRAINT personas_pkey PRIMARY KEY (idper),
CONSTRAINT personas_codigoper_documentoper_key UNIQUE (codigoper, documentoper)
)
WITH (
OIDS=FALSE
);
ALTER TABLE public.personas
OWNER TO postgres;

CREATE TABLE public.proyectos


(
idpro integer NOT NULL DEFAULT nextval('proyectos_idpro_seq'::regclass),
descripcionpro character varying,
costopro numeric,
fechainpro date,
fechadinpro date,
fecharealfinpro date,
clientesidcli integer,
idclipro integer,
CONSTRAINT proyectos_pkey PRIMARY KEY (idpro),
CONSTRAINT proyectos_idclipro_fkey FOREIGN KEY (idclipro)
REFERENCES public.proyectos (idpro) MATCH SIMPLE
ON UPDATE RESTRICT ON DELETE RESTRICT
)
WITH (
OIDS=FALSE
);
ALTER TABLE public.proyectos
OWNER TO postgres;

- Ejercicio 3

--empleados_proyecto
CREATE TABLE public.auditoria
(
logid integer NOT NULL DEFAULT nextval('auditoria_logid_seq'::regclass),
logmensaje character varying NOT NULL,
CONSTRAINT auditoria_pkey PRIMARY KEY (logid)
)
WITH (
OIDS=FALSE
);
ALTER TABLE public.auditoria
OWNER TO postgres;

CREATE OR REPLACE FUNCTION public.FN_INSERT_empleados_proyecto()


RETURNS TRIGGERS AS
$$
BEGIN
IF TG_OP=�INSERT� THEN
INSERT INTO AUDITORIA(LOG_MENSAJE)
VALUES( �123� || NEW.idemppro || � fue agregado �);
RETURN NEW;
ELSEIF TG_OP=�UPDATE� THEN
I NSERT INTO AUDITORIA(LOG_MENSAJE)
VALUES( �134� || OLD.idemppro || � cambio su id para �||NEW.idcli);
RETURN NEW;
ELSEIF TG_OP=�DELETE� THEN
INSERT INTO AUDITORIA(LOG_MENSAJE)
VALUES( �234 � || OLD.idemppro || � fue ELIMINADO �);
RETURN OLD;
END IF;
RETURN NULL;
END;
$$
LANGUAGE PLPGSQL;

CREATE TRIGGER TR_INSERT_empleados_proyecto


BEFORE INSERT OR UPDATE OR DELETE ON public.empleados_proyecto
FOR EACH ROW
EXECUTE PROCEDURE public.FN_INSERT_empleados_proyecto;

--empleados
CREATE TABLE public.auditoria
(
logid integer NOT NULL DEFAULT nextval('auditoria_logid_seq'::regclass),
logmensaje character varying NOT NULL,
CONSTRAINT auditoria_pkey PRIMARY KEY (logid)
)
WITH (
OIDS=FALSE
);
ALTER TABLE public.auditoria
OWNER TO postgres;

CREATE OR REPLACE FUNCTION public.FN_INSERT_empleados()


RETURNS TRIGGERS AS
$$
BEGIN
IF TG_OP=�INSERT� THEN
INSERT INTO AUDITORIA(LOG_MENSAJE)
VALUES( �el cliente� || NEW.idemp || � fue agregado �);
RETURN NEW;
ELSEIF TG_OP=�UPDATE� THEN
I NSERT INTO AUDITORIA(LOG_MENSAJE)
VALUES( �el cliente� || OLD.idemp || � cambio su id para �||NEW.idcli);
RETURN NEW;
ELSEIF TG_OP=�DELETE� THEN
INSERT INTO AUDITORIA(LOG_MENSAJE)
VALUES( �el cliente � || OLD.idemp || � fue ELIMINADO �);
RETURN OLD;
END IF;
RETURN NULL;
END;
$$
LANGUAGE PLPGSQL;

CREATE TRIGGER TR_INSERT_empleados


BEFORE INSERT OR UPDATE OR DELETE ON public.empleados
FOR EACH ROW
EXECUTE PROCEDURE public.FN_INSERT_empleados;

--personas
CREATE TABLE public.auditoria
(
logid integer NOT NULL DEFAULT nextval('auditoria_logid_seq'::regclass),
logmensaje character varying NOT NULL,
CONSTRAINT auditoria_pkey PRIMARY KEY (logid)
)
WITH (
OIDS=FALSE
);
ALTER TABLE public.auditoria
OWNER TO postgres;

CREATE OR REPLACE FUNCTION public.FN_INSERT_personas()


RETURNS TRIGGERS AS
$$
BEGIN
IF TG_OP=�INSERT� THEN
INSERT INTO AUDITORIA(LOG_MENSAJE)
VALUES( �valeria� || NEW.nombreper || � fue agregado �);
RETURN NEW;
ELSEIF TG_OP=�UPDATE� THEN
I NSERT INTO AUDITORIA(LOG_MENSAJE)
VALUES( �valeria� || OLD.nombreper || � cambio su id para �||NEW.idcli);
RETURN NEW;
ELSEIF TG_OP=�DELETE� THEN
INSERT INTO AUDITORIA(LOG_MENSAJE)
VALUES( �valeria � || OLD.nombreper || � fue ELIMINADO �);
RETURN OLD;
END IF;
RETURN NULL;
END;
$$
LANGUAGE PLPGSQL;

CREATE TRIGGER TR_INSERT_personas


BEFORE INSERT OR UPDATE OR DELETE ON public.personas
FOR EACH ROW
EXECUTE PROCEDURE public.FN_INSERT_personas;

--proyectos
CREATE TABLE public.auditoria
(
logid integer NOT NULL DEFAULT nextval('auditoria_logid_seq'::regclass),
logmensaje character varying NOT NULL,
CONSTRAINT auditoria_pkey PRIMARY KEY (logid)
)
WITH (
OIDS=FALSE
);
ALTER TABLE public.auditoria
OWNER TO postgres;

CREATE OR REPLACE FUNCTION public.FN_INSERT_proyectos()


RETURNS TRIGGERS AS
$$
BEGIN
IF TG_OP=�INSERT� THEN
INSERT INTO AUDITORIA(LOG_MENSAJE)
VALUES( �3� || NEW.clientesidcli|| � fue agregado �);
RETURN NEW;
ELSEIF TG_OP=�UPDATE� THEN
I NSERT INTO AUDITORIA(LOG_MENSAJE)
VALUES( �3� || OLD.clientesidcli || � cambio su id para �||NEW.idcli);
RETURN NEW;
ELSEIF TG_OP=�DELETE� THEN
INSERT INTO AUDITORIA(LOG_MENSAJE)
VALUES( �3 � || OLD.clientesidcli || � fue ELIMINADO �);
RETURN OLD;
END IF;
RETURN NULL;
END;
$$
LANGUAGE PLPGSQL;

CREATE TRIGGER TR_INSERT_proyectos


BEFORE INSERT OR UPDATE OR DELETE ON public.proyectos
FOR EACH ROW
EXECUTE PROCEDURE public.FN_INSERT_proyectos;

--clientes
CREATE TABLE public.auditoria
(
logid integer NOT NULL DEFAULT nextval('auditoria_logid_seq'::regclass),
logmensaje character varying NOT NULL,
CONSTRAINT auditoria_pkey PRIMARY KEY (logid)
)
WITH (
OIDS=FALSE
);
ALTER TABLE public.auditoria
OWNER TO postgres;

CREATE OR REPLACE FUNCTION public.FN_INSERT_clientes()


RETURNS TRIGGERS AS
$$
BEGIN
IF TG_OP=�INSERT� THEN
INSERT INTO AUDITORIA(LOG_MENSAJE)
VALUES( �clientes� || NEW.cliente|| � fue agregado �);
RETURN NEW;
ELSEIF TG_OP=�UPDATE� THEN
I NSERT INTO AUDITORIA(LOG_MENSAJE)
VALUES( �clientes� || OLD.cliente || � cambio su id para �||NEW.idcli);
RETURN NEW;
ELSEIF TG_OP=�DELETE� THEN
INSERT INTO AUDITORIA(LOG_MENSAJE)
VALUES( �clientes � || OLD.cliente || � fue ELIMINADO �);
RETURN OLD;
END IF;
RETURN NULL;
END;
$$
LANGUAGE PLPGSQL;

CREATE TRIGGER TR_INSERT_clientes


BEFORE INSERT OR UPDATE OR DELETE ON public.clientes
FOR EACH ROW
EXECUTE PROCEDURE public.FN_INSERT_clientes;

- Ejercicio 4

--personas
insert into personas(idper, codigoper, documentoper, nombreper, apellidosper,
direccionper,ciudadper,telefonoper) values (1, 001,
123456,'Johana','Gamarra','Barrio Sajonia',
'Asuncion', 0975882250)

insert into personas(idper, codigoper, documentoper, nombreper, apellidosper,


direccionper,ciudadper,telefonoper) values (2, 002,
456123,'Arturo','Rubin','Avenida 9 e julio',
'Asuncion', 121245)

insert into personas(idper, codigoper, documentoper, nombreper, apellidosper,


direccionper,ciudadper,telefonoper) values (3, 003,
2255446,'Homero','Simpsons','Cerca de Moes',
'Springfield', 021556699)

insert into personas(idper, codigoper, documentoper, nombreper, apellidosper,


direccionper,ciudadper,telefonoper) values (4, 004, 8899775,
'Menchi','Barriocanal','Av oscar acosta',
'Villarica', 08001112)

insert into personas(idper, codigoper, documentoper, nombreper, apellidosper,


direccionper,ciudadper,telefonoper) values (5, 005, 658742,'Oscar','Acosta','Av
correr Camino',
'Caaguazu', 123456)

insert into personas(idper, codigoper, documentoper, nombreper, apellidosper,


direccionper,ciudadper,telefonoper) values (6, 006, 985621,'Yolanda','Park','Av
Porro',
'Caazapa', 09041414)

--cliente
insert into Clientess(id_cliente, codigo_cliente, idpercli) values (1, '00f01', 1)
insert into Clientess(id_cliente, codigo_cliente, idpercli) values (2, 'Cli002', 2)
insert into Clientess(id_cliente, codigo_cliente, idpercli) values (3, 'Cli0003',
3)
insert into Clientess(id_cliente, codigo_cliente, idpercli) values (4, '00f004', 4)
insert into Clientess(id_cliente, codigo_cliente, idpercli) values (5, 'Cli005', 5)
--empleado
insert into empleados(idemp, codigoemp, salarioemp, idperemp) values(1, 'Emp001',
1824000, 1)
insert into empleados(idemp, codigoemp, salarioemp, idperemp) values(2, 'Emp002',
1524000, 2)
insert into empleados(idemp, codigoemp, salarioemp, idperemp) values(3, 'Emp003',
1924000, 3)
insert into empleados(idemp, codigoemp, salarioemp, idperemp) values(4, 'Emp004',
1800000, 4)
insert into empleados(idemp, codigoemp, salarioemp, idperemp) values(5, 'Emp005',
5000000, 5)

--empleado_proyecto
insert into empleadosproyectos(idempro, idemp, idpro) values(1,1,1)
insert into empleadosproyectos(idempro, idemp, idpro) values(2,2,2)
insert into empleadosproyectos(idempro, idemp, idpro) values(3,3,3)
insert into empleadosproyectos(idempro, idemp, idpro) values(4,4,4)
insert into empleadosproyectos(idempro, idemp, idpro) values(5,5,5)

--proyecto
insert into proyectos(idpro, descripcionpro, costopro, fechainipro,
fecharealfinpro, clientesidcli,
idclipro) values(1,'sql', 2000000, '2016-03-03', '2016-12-31', '2016-12,31', 1)

insert into proyectos(idpro, descripcionpro, costopro, fechainipro,


fecharealfinpro, clientesidcli,
idclipro) values(2,'java', 3000000, '2016-01-01', '2016-06-05', '2016-12-31', 2,2)

insert into proyectos(idpro, descripcionpro, costopro, fechainipro,


fecharealfinpro, clientesidcli,
idclipro) values(3,'html', 4000000, '2016-03-04', '2016-11-13', '2016-12-31', 3,3)

insert into proyectos(idpro, descripcionpro, costopro, fechainipro,


fecharealfinpro, clientesidcli,
idclipro) values(4,'oracle', 5000000, '2016-06-05', '2016-02-12', '2016-12-31',
4,4)

insert into proyectos(idpro, descripcionpro, costopro, fechainipro,


fecharealfinpro, clientesidcli,
idclipro) values(5,'java', 1550000, '2016-01-02','2016-07-05', '2016-12-31', 3,3)

- Ejercicio 5

select * from clientes;


select * from proyectos;
select * from auditoria;
select * from empleados;
select * from empleados_proyectos;
select * from personas;

- Ejercicio 6

select distinct descripcionpro from proyectos;

- Ejercicio 7

SELECT Clientes.idcli,proyectos.idpro
FROM Clientes
INNER JOIN proyectos
ON Clientes.idcli=proyectos.idpro
order by Clientes.idcli;

SELECT personas.idper,proyectos.idpro
FROM personas
INNER JOIN proyectos
ON personas.idper=proyectos.idpro
order by personas.idper;

SELECT clientes.idpercli,proyectos.idpro
FROM clientes
INNER JOIN proyectos
ON clientes.idpercli=proyectos.idpro
order by clientes.idpercli;

- Ejercicio 8

SELECT clientes.idpercli,proyectos.idpro
FROM clientes
RIGHT JOIN proyectos
ON clientes.idpercli=proyectos.idpro
order by clientes.idpercli;

SELECT Clientes.idcli,proyectos.idpro
FROM Clientes
RIGHT JOIN proyectos
ON Clientes.idcli=proyectos.idpro
order by Clientes.idcli;

SELECT personas.idper,proyectos.idpro
FROM personas
RIGHT JOIN proyectos
ON personas.idper=proyectos.idpro
order by personas.idper;

- Ejercicio 9

SELECT clientes.idpercli,proyectos.idpro
FROM clientes
LEFT JOIN proyectos
ON clientes.idpercli=proyectos.idpro
order by clientes.idpercli;

SELECT Clientes.idcli,proyectos.idpro
FROM Clientes
LEFT JOIN proyectos
ON Clientes.idcli=proyectos.idpro
order by Clientes.idcli;

SELECT personas.idper,proyectos.idpro
FROM personas
LEFT JOIN proyectos
ON personas.idper=proyectos.idpro
order by personas.idper;

- Ejercicio 10

SELECT clientes.idpercli,proyectos.idpro
FROM clientes
FULL JOIN proyectos
ON clientes.idpercli=proyectos.idpro
order by clientes.idpercli;

SELECT Clientes.idcli,proyectos.idpro
FROM Clientes
FULL JOIN proyectos
ON Clientes.idcli=proyectos.idpro
order by Clientes.idcli;

SELECT personas.idper,proyectos.idpro
FROM personas
FULL JOIN proyectos
ON personas.idper=proyectos.idpro
order by personas.idper;

- Ejercicio 11

CREATE VIEW vw_clientes AS select codigocli, documentoper, nombreper || ','||


apellidoper as cliente from personas, Clientes where
Clientes.idpercli=personas.idper;

- Ejercicio 12

CREATE VIEW vw_empleados as select codigoemp, documentoper,nombreper||','||


apellidoper as empleados, salarioemp from personas,empleados where
empleados.idperemp=personas.idper;

- Ejercicio 13

create view vw_clientes_proyectos


as select codigocli,nombreper||','|| apellidoper as Clientes, descripcionpro,
costopro from proyectos, clientes,personas
where proyectos.idclipro=Clientes.idcli and Clientes.idpercli=personas.idper;

- Ejercicio 14

create or replace function FN_RETORNAR_CLIENTE(in ID integer, out cliente


varchar(80))
returns character varying as
$$
declare
personas record;
BEGIN
select into Personas * from Personas left join Clientes on idPer=idPerCli
where idCli=ID;
cliente=Personas.NombrePer;
RETURN;
END;
$$
LANGUAGE PLPGSQL;

- Ejercicio 15

CREATE OR REPLACE FUNCTION public.FN_RETORNARE2(IN c varchar (12),


OUT id INTEGER,OUT codigo varchar(15),out documento varchar(12),out nombre varchar
(80),
out apellidos varchar (80),out direccion varchar(150),out ciudad varchar(150),out
telefono varchar (150))
RETURNS record as

$$
DECLARE
consulta record;
BEGIN
SELECT into consulta * FROM PERSONAS where c=documentoper;
id=consulta.idper;
codigo=consulta.codigoper;
documento=consulta.documentoper;
nombre=consulta.nombreper;
apellidos=consulta.apellidoper;
direccion=consulta.direccionper;
ciudad=consulta.ciudadper;
telefono=consulta.telefonoper;
RETURN;
END;
$$
LANGUAGE PLPGSQL VOLATILE;

select public.FN_RETORNARE2('456123');

- Ejercicio 16

CREATE OR REPLACE FUNCTION public.FN_RETORNARE3(IN des varchar (80),


OUT nombre varchar(80),out costo numeric(19,0),out descripcion varchar(80))
RETURNS record as

$$
DECLARE
proyecto record;
BEGIN
SELECT into proyecto * FROM PROYECTOS,CLIENTES,PERSONAS where
des=descripcionpro and idclipro=idcli and idpercli=idper;
nombre=proyecto.nombreper;
costo=proyecto.costopro;
descripcion=proyecto.descripcionpro;
RETURN;
END;
$$
LANGUAGE PLPGSQL VOLATILE;

select public.FN_RETORNARE3('HTML');

- Ejercicio 17

CREATE OR REPLACE FUNCTION public.FN_RETORNARE4(in f1 date,in f2 date,out des


varchar (80))
RETURNS character varying as

$$
DECLARE
dato record;
BEGIN
SELECT into dato * FROM PROYECTOS where fechainpro>=f1 and fechainpro<=f2;
des=dato.descripcionpro;
RETURN;
END;
$$
LANGUAGE PLPGSQL;
select FN_RETORNARE4('2016-01-01','2016-12-10');

- Ejercicio 18

create or replace function FN_RETORNAR_POB(


out nombre varchar(80),
out ape varchar (80),
out id integer,
out cod varchar(15))
returns record as
$$
declare
pob record;
begin

select into pob nombreper, apellidoper ,idemp, codigoemp from personas join
empleados on idper=idperemp where salarioemp<1500000;
nombre=pob.nombreper;
ape=pob.apellidoper;
id=pob.idemp;
cod=pob.codigoemp;
return;
end
$$
language PLPGSQL volatile;

- Ejercicio 19

create or replace function FN_RETORNAR_CMAX(


out id integer,
out descr varchar(80),
out costo numeric(19,0),
out fecha_i date,
out fecha_f date,
out fecha_r date,
out cli integer,
out idcp integer)
returns record as
$$
declare
Max record;
begin
select into Max * from Proyectos where costopro= (select max(costopro) from
proyectos);
id= Max.idPro;
descr=Max.descripcionpro;
costo=Max.costopro;
fecha_i=Max.fechainpro;
fecha_f=Max.fechafinpro;
fecha_r=Max.fecharealfinpro;
cli=Max.clientesidcli;
idcp=Max.idclipro;
return;
end
$$
language PLPGSQL;
select FN_RETORNAR_CMAX();

Вам также может понравиться