This repository has been archived by the owner on Aug 10, 2018. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
insert_procedures.sql
125 lines (114 loc) · 4.37 KB
/
insert_procedures.sql
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
-- Inserir reparador
-- Primeiro, verifica-se se a pessoa já foi cadastrada. Caso sim, adiciona apenas o reparador, caso contrário retorna falso.
-- Caso a pessoa nao esteja cadastrada, insere na View do reparador.
-- Para inserir na view do reaparador, é necessário uma Trigger para fazer a inserção nas tabelas correspondentes.
-- Autor: Marcio Lima Inácio
CREATE OR REPLACE FUNCTION insert_reparador(_cpf VARCHAR, tipos VARCHAR[]) RETURNS boolean AS $$
DECLARE
_tipo ReparadorTipo.tipo%TYPE;
BEGIN
IF LENGTH (_cpf) != 11 THEN
RAISE EXCEPTION 'CPF Invalido';
END IF;
IF tipos = '{}' THEN
RAISE EXCEPTION 'Selecione os tipos do Reparador';
END IF;
IF EXISTS (SELECT 1 FROM Pessoa p WHERE p.cpf = _cpf) THEN
IF NOT EXISTS (SELECT 1 FROM Reparador r WHERE r.cpf_pessoa = _cpf) THEN
INSERT INTO Reparador VALUES (_cpf);
FOREACH _tipo IN ARRAY tipos
LOOP
IF NOT EXISTS (SELECT 1 FROM ReparadorTipo rt WHERE rt.cpf_reparador = _cpf AND rt.tipo = _tipo) THEN
INSERT INTO ReparadorTipo VALUES (_cpf, _tipo);
END IF;
END LOOP;
ELSE
RAISE EXCEPTION 'Reparador já cadastrado';
END IF;
RETURN (TRUE);
ELSE
RETURN (FALSE);
END IF;
END;
$$ LANGUAGE plpgsql;
CREATE OR REPLACE FUNCTION insert_reparador(_cpf VARCHAR,
_sexo VARCHAR,
_rg VARCHAR,
_nome_prenome VARCHAR,
_nome_sobrenome VARCHAR,
_data_de_nascimento VARCHAR,
_email VARCHAR,
tipos VARCHAR[]) RETURNS void AS $$
DECLARE
tipo ReparadorTipo.tipo%TYPE;
BEGIN
FOREACH tipo IN ARRAY tipos
LOOP
INSERT INTO view_reparador (cpf, sexo, rg, nome_prenome, nome_sobrenome, data_de_nascimento, email, tipo)
VALUES (_cpf, _sexo, _rg, _nome_prenome, _nome_sobrenome, TO_DATE(_data_de_nascimento, 'DD/MM/YYYY'), _email, tipo);
END LOOP;
END;
$$ LANGUAGE plpgsql;
-- Inserir cozinheira
-- Autor: Marcio Lima Inácio
CREATE OR REPLACE FUNCTION insert_cozinheira(_cpf VARCHAR) RETURNS boolean AS $$
BEGIN
IF LENGTH (_cpf) != 11 THEN
RAISE EXCEPTION 'CPF Invalido';
END IF;
IF EXISTS (SELECT 1 FROM Pessoa p WHERE p.cpf = _cpf) THEN
IF NOT EXISTS (SELECT 1 FROM Cozinheira c WHERE c.cpf_pessoa = _cpf) THEN
INSERT INTO Cozinheira VALUES (_cpf);
ELSE
RAISE EXCEPTION 'Cozinheira já cadastrada';
END IF;
RETURN (TRUE);
ELSE
RETURN (FALSE);
END IF;
END;
$$ LANGUAGE plpgsql;
CREATE OR REPLACE FUNCTION insert_reparador(_cpf VARCHAR,
_sexo VARCHAR,
_rg VARCHAR,
_nome_prenome VARCHAR,
_nome_sobrenome VARCHAR,
_data_de_nascimento VARCHAR,
_email VARCHAR) RETURNS void AS $$
DECLARE
tipo ReparadorTipo.tipo%TYPE;
BEGIN
INSERT INTO Pessoa VALUES (_cpf, _seco, _rg, _nome_prenome, _nome_sobrenome, TO_DATE(_data_de_nascimento, 'DD/MM/YYYY'), _email);
INSERT INTO Cozinheira VALUES (_cpf);
END;
$$ LANGUAGE plpgsql;
-- Inserir nutricionista
-- Autor: Tiago Bachiega de Almeida
CREATE OR REPLACE FUNCTION insert_nutricionista(_cpf VARCHAR) RETURNS boolean AS $$
BEGIN
IF LENGTH (_cpf) != 11 THEN
RAISE EXCEPTION 'CPF Invalido';
END IF;
IF EXISTS (SELECT 1 FROM Pessoa p WHERE p.cpf = _cpf) THEN
INSERT INTO Nutricionista VALUES (_cpf);
RETURN (TRUE);
ELSE
RETURN (FALSE);
END IF;
END;
$$ LANGUAGE plpgsql;
-- Inserir morador
-- Autor: Tiago Bachiega de Almeida
CREATE OR REPLACE FUNCTION insert_morador(_trabalho VARCHAR, _universidade VARCHAR, _cpf VARCHAR) RETURNS boolean AS $$
BEGIN
IF LENGTH (_cpf) != 11 THEN
RAISE EXCEPTION 'CPF Invalido';
END IF;
IF EXISTS (SELECT 1 FROM Pessoa p WHERE p.cpf = _cpf) THEN
INSERT INTO Morador VALUES (_trabalho, _universidade, _cpf);
RETURN (TRUE);
ELSE
RETURN (FALSE);
END IF;
END;
$$ LANGUAGE plpgsql;