Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#1 18/01/2014 17:35:01
- kant1.dro
- Membre
Etude de cas
Bonjour à tous, je travaille actuellement sur une étude de cas et voici la question :
Créer une fonction qui prend trois paramètres : un code auditeur et deux codes d’unités d’enseignement et qui retourne vrai si l’auditeur les a validés toutes les deux et faux sinon.
voici mon code :
CREATE OR REPLACE FUNCTION validation_2ue(CHAR(6), CHAR(6), INT) RETURNS BOOLEAN AS '
DECLARE
REP BOOLEAN;
REP2 BOOLEAN;
codeue1 ALIAS FOR $1;
codeue2 ALIAS FOR $2;
manote1 inscription_ue.note1%TYPE;
manote2 inscription_ue.note2%TYPE;
manote2_1 inscription_ue.note1%TYPE;
manote2_2 inscription_ue.note2%TYPE;
BEGIN
SELECT INTO manote1 note1, manote2 note2 FROM inscription_ue NATURAL JOIN inscription NATURAL JOIN auditeur WHERE codeue IN (SELECT codeue FROM inscription_ue WHERE codeue=codeue1) AND codeauditeur=$3;
IF (manote1 IS NULL AND manote2 IS NULL) THEN
REP := FALSE;
END IF;
IF ((manote1>=10 OR manote2>=10) OR (manote1 IS NULL AND manote2>=10) OR (manote1>=10 AND manote2 IS NULL)) THEN
REP := TRUE;
END IF;
SELECT INTO manote2_1 note1, manote2_2 note2 FROM inscription_ue NATURAL JOIN inscription NATURAL JOIN auditeur WHERE codeue IN (SELECT codeue FROM inscription_ue WHERE codeue=codeue2) AND codeauditeur=$3;
IF (manote2_1 IS NULL AND manote2_2 IS NULL) THEN
REP2 := FALSE;
END IF;
IF ((manote2_1>=10 OR manote2_2>=10) OR (manote2_1 IS NULL AND manote2_2>=10) OR (manote2_1>=10 AND manote2_2 IS NULL) )THEN
REP2 := TRUE;
END IF;
IF (REP AND REP2) THEN
RETURN TRUE;
ELSE
RETURN FALSE;
END IF;
END;
' LANGUAGE 'plpgsql';
Le bémol c'est que même si un auditeur a validé les 2 ue mais qu'une des 2 notes pr le 1ere ue est NULL et/ou qu'une des 2notes pr la 2nde ue est NULL la requête me renvoie false ...or il suffis qu'il ai eu une des 2 notes >=10 (pour la 1ere ue) et une des 2 notes >=10(pour la 2nde) pour true...
Toutes aides est bonne à prendre,
Merci,
kant1.dro
Hors ligne
#2 22/01/2014 12:42:13
- SQLpro
- Membre
Re : Etude de cas
Hou quelle horreur ! Faites plutôt une seule requête et une seule ligne commençant par :
RETURN CASE WHEN EXISTS(ma requête test) THEN true ELSE false END;
A +
Frédéric Brouard, alias SQLpro, ARCHITECTE DE DONNÉES, Expert langage SQL
Le site sur les SGBD relationnel et langage SQL : http://sqlpro.developpez.com/
Modélisation de données, conseil, expertise, audit, optimisation, tuning, formation
* * * * * Enseignant CNAM PACA, ISEN Toulon, CESI Aix en Provence * * * * *
Hors ligne
Pages : 1