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
|
DROP LANGUAGE IF EXISTS plpgsql CASCADE;
CREATE LANGUAGE plpgsql;
------------------------
-- CREATION DES TYPES --
------------------------
DROP TYPE IF EXISTS enum_admingrp CASCADE;
CREATE TYPE enum_admingrp AS ENUM ('groupe 1', 'groupe 2');
-------------------------
-- CREATION DES TABLES --
-------------------------
DROP TABLE IF EXISTS ADMINISTRATION CASCADE;
CREATE TABLE ADMINISTRATION (
id serial,
nom varchar(64) NOT NULL UNIQUE CHECK (nom SIMILAR TO '[a-zA-Z -]+' = true),
adr_postal varchar(64) NOT NULL CHECK (adr_postal SIMILAR TO '([a-zA-Z0-9 ,.-])+' = true),
cd_postal numeric(5) NOT NULL, CHECK (cd_postal > 1000),
commune varchar(32) NOT NULL, CHECK (commune SIMILAR TO '[a-zA-Z -]+' = true),
num_tel char(10) NOT NULL, CHECK (num_tel SIMILAR TO '[[:digit:]]+' = true),
groupe enum_admingrp,
CONSTRAINT "administration_pkey" PRIMARY KEY (id)
);
----------------------------
-- CREATION DES FONCTIONS --
----------------------------
DROP FUNCTION IF EXISTS creer_administration();
CREATE FUNCTION creer_administration(_nom varchar, _adr_postal varchar, _cd_postal numeric, _commune varchar, _num_tel char, _groupe enum_admingrp) RETURNS boolean AS
$$
BEGIN
INSERT INTO ADMINISTRATION (nom, adr_postal, cd_postal, commune, num_tel, groupe) VALUES (upper(_nom), _adr_postal, _cd_postal, upper(_commune), _num_tel, _groupe);
RAISE NOTICE 'ADMINISTRATION CRÉÉE :%', _nom;
RETURN true;
EXCEPTION
WHEN check_violation THEN
RAISE NOTICE 'ADMINISTRATION NON CRÉÉE :% (check_violation) ', _nom;
RETURN false;
WHEN not_null_violation THEN
RAISE NOTICE 'ADMINISTRATION NON CRÉÉE :% (not_null_violation) ', _nom;
RETURN false;
WHEN unique_violation THEN
RAISE NOTICE 'ADMINISTRATION NON CRÉÉE :% (unique_violation) ', _nom;
RETURN false;
END;
$$
LANGUAGE plpgsql;
DROP FUNCTION IF EXISTS creer_organisme();
CREATE FUNCTION creer_organisme(_nom varchar, _adr_postal varchar, _cd_postal numeric, _commune varchar, _num_tel char) RETURNS boolean AS
$$
DECLARE
retour boolean;
BEGIN
SELECT creer_administration(_nom, _adr_postal, _cd_postal, _commune, _num_tel, 'groupe 1') INTO retour;
RETURN retour;
END;
$$
LANGUAGE plpgsql;
-----------------------
-- CREATION DES VUES --
-----------------------
CREATE VIEW GROUPE1 AS SELECT * FROM ADMINISTRATION WHERE groupe = 'groupe 1';
CREATE VIEW GROUPE2 AS SELECT * FROM ADMINISTRATION WHERE groupe = 'groupe 2';
---------------------------
-- INSERTION DES DONNÉES --
---------------------------
SELECT creer_administration('organisme un', '9, rue de l eglise', 75000, 'PARIS', '0000000000', 'groupe 1');
SELECT creer_organisme('organisme 2', '10, rue de l eglise', 75000, 'PARIS', '0000000000');
SELECT creer_organisme('organisme trois', '9, rue de l''église', 75000, 'PARIS', '0000000000');
SELECT creer_organisme('organisme quatre', '9, rue de l eglise', 75000, 'PARIS', '0000000000');
SELECT * FROM ADMINISTRATION; |
Partager