Erreur de syntaxe

Le problème exposé dans ce sujet a été résolu.

Bonjour,

Dans le cadre d’un travail, je bloque sur une erreur de syntaxe.

J’ai tenté de deux façons différentes, mais l’erreur se situe toujours au même endroit (cf. commentaires), ce qui me fait penser que ça provient des lignes précédentes sans que j’en voie l’issue. Je sollicite donc votre aide pour y voir plus clair :

Façon 1

1
2
3
4
CREATE OR REPLACE FUNCTION disponiblite(date1 DATE, salle VARCHAR)
RETURNS BOOLEAN AS $$
NOT EXISTS(SELECT datecours, lieu FROM cours WHERE datecours = $1 AND lieu = $2) -- Erreur signalée au NOT 
$$ LANGUAGE sql;

Façon 2

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
CREATE OR REPLACE FUNCTION disponiblite(date1 DATE, salle VARCHAR)
RETURNS BOOLEAN AS $$
BEGIN
  IF EXISTS(SELECT datecours, lieu FROM cours WHERE datecours = $1 AND lieu = $2) -- Erreur signalée au IF
  BEGIN
    RETURN FALSE
  END;
  RETURN TRUE
END;
$$ LANGUAGE sql;

Merci d’avance. :)

Bonjour. d’apres http://sql.sh/cours/where/exists le EXISTS s’utilise plutot dans la construction de sous requete que comme tu tente de l’utiliser. C’est peut etre la raison de l’erreur. Tout comme un WHERE ne peut etre utilisé seul.

Quel SGBD utilise-tu ? c’est une information qui peut aider a trouver une solution. Puisque la syntaxe des script depend fortement de ce dernier…

Une solution pas tres propre mais qui devrais pouvoir te depanner, c’est de compter les resultats, si r==0 => true, si r!=0 => false.

Merci pour la réponse.

Alors, pour la syntaxe, je me suis aidé de ce que j’ai pu trouver au cours de mes recherches, comme ici. Après oui, peut-être que les solutions proposées ne sont pas en adéquation avec le SGBD que j’utilise, à savoir PostgreSQL.

Du coup, j’ai testé la solution de compter les résultats, mais là encore j’ai le même problème :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
CREATE OR REPLACE FUNCTION disponiblite(date1 DATE, salle VARCHAR)
RETURNS BOOLEAN AS $$
BEGIN
  SELECT datecours, lieu FROM cours WHERE datecours = $1 AND lieu = $2; -- Erreur signalée au SELECT
  IF SQL%ROWCOUNT = 0
  BEGIN
    RETURN TRUE
  END;
  RETURN FALSE
END;
$$ LANGUAGE sql;

Ceci est accepté :

1
2
3
4
5
6
CREATE OR REPLACE FUNCTION disponiblite(date1 DATE, salle VARCHAR)
RETURNS BOOLEAN AS $$
BEGIN
     RETURN NOT EXISTS(SELECT datecours, lieu FROM cours WHERE datecours = $1 AND lieu = $2);
END;
$$ LANGUAGE plpgsql;

?

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte