PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 PL/pgSQL » Etude de cas » 18/01/2014 17:35:01

kant1.dro
Réponses : 1

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

Pied de page des forums

Propulsé par FluxBB