Previous Up Next
Université Lille 3-Charles de GaulleUFR de Mathématiques Sciences Économiques et Sociales

Chapitre 58  Correction des exercices en PL/pgSQL

Solution de l'exercice 91
  1. La fonction :
    CREATE OR REPLACE FUNCTION moySalaire() RETURNS NUMERIC AS '
    DECLARE
        moyenne numeric;
    BEGIN
        SELECT INTO moyenne AVG(salaire) FROM emp;
        RETURN moyenne ;
    END;
    ' LANGUAGE plpgsql;
    
    Un exemple d'utilisation « en direct » :
    SELECT moySalaire();
    
  2. Les noms et le salaire des employés qui gagnent plus que le salaire moyen :
    SELECT nom,salaire FROM emp 
     WHERE salaire>moySalaire();
    
  3. Ceux dont le salaire est égal au salaire moyen à 10% près :
    SELECT nom,salaire FROM emp 
     WHERE ABS(salaire-moySalaire())<0.10*moySalaire();
    
Solution de l'exercice 92
CREATE OR REPLACE FUNCTION departement(integer) RETURNS VARCHAR AS '
DECLARE
    dpt varchar;
BEGIN
    SELECT INTO dpt d.nom FROM emp e,dept d 
           WHERE e.nodept=d.nodept AND noemp=$1;
    RETURN dpt ;
END;
' LANGUAGE plpgsql;
Solution de l'exercice 93
CREATE OR REPLACE FUNCTION collegues(integer) RETURNS SETOF RECORD  AS '
DECLARE
   rec RECORD;
BEGIN
   FOR rec IN SELECT c.prenom ,c.nom
                FROM emp e, emp c
               WHERE e.nodept=c.nodept AND e.noemp=$1 
     LOOP
       RETURN NEXT rec ;
     END LOOP ;
   RETURN ;
END;
' LANGUAGE plpgsql;
Exemple d'utilisation :
SELECT * FROM collegues(7) AS (prenom VARCHAR,nom VARCHAR);
Solution de l'exercice 94
CREATE OR REPLACE FUNCTION numlignes(TEXT) RETURNS INTEGER AS '
DECLARE
   table_name ALIAS FOR $1;
   rec RECORD;
BEGIN
   FOR rec IN EXECUTE ''SELECT COUNT(*) FROM '' || table_name LOOP
       RETURN rec.count;
   END LOOP;
   RETURN 0;
END;
' LANGUAGE plpgsql;
Solution de l'exercice 95 Solution de l'exercice 96
DROP FUNCTION moySalaire() ;
DROP FUNCTION departement(integer) ;
DROP FUNCTION collegues(integer) ;
DROP FUNCTION numlignes(text) ;
DROP FUNCTION superieurs(integer) ;
D.Gonzalez (gonzalez@univ-lille3.fr) en date du th , 

Previous Up Next