2 votes

MYSQL - Obtenir OK comme résultat, à cause de la sous-requête ?

Mon Workbench me donne un "OK" en sortie, sans autre information. Grâce à des questions précédentes, j'ai découvert que le problème venait de la sous-requête. Mais je ne sais pas quel est le problème.

C'est mon code :

**CREATE FUNCTION crew_headcount(FlightNo varchar(7), DepartureDateAndTimeUTC timestamp)
RETURNS INT 
DETERMINISTIC
RETURN CASE
    WHEN  
        FlightNo IN(flightexecution.FlightNo) 
        AND DepartureDateAndTimeUTC IN(flightexecution.DepartureDateAndTimeUTC)
    THEN 
         (SELECT COUNT(crew.EmployeeID) 
         FROM crew, flightexecution 
         WHERE crew.FlightNo = flightexecution.FlightNo 
             AND FlightNo = flightexecution.FlightNo 
             AND DepartureDateAndTimeUTC = flightexecution.DepartureDateAndTimeUTC)
    ELSE -1 
    END;**

Mon but est de remplir ma fonction avec les paramètres FlightNO et DepatureTime et si ces deux valeurs peuvent être trouvées dans la table disponible, le nombre de membres d'équipage devrait sortir comme résultat, sinon un "-1".

J'espère que quelqu'un pourra m'aider. Merci

1voto

Sean Murphy Points 11

Je ne vois pas pourquoi il renverrait "OK", si ce n'est que la fonction s'est exécutée sans problème. Comment exécutez-vous la fonction dans MySQL Workbench ? Quelle version de Workbench ?

Vous pouvez essayer de remanier la partie WHEN de votre instruction CASE :

CASE
    WHEN  
        (SELECT COUNT(*) 
         FROM flightexecution 
         WHERE flightexecution.FlightNo = FlightNo AND
               flightexecution.DepartureDateAndTimeUTC = DepartureDateAndTimeUTC) > 0
    THEN 
         (SELECT COUNT(crew.EmployeeID) 
         FROM crew, flightexecution 
         WHERE crew.FlightNo = flightexecution.FlightNo 
             AND FlightNo = flightexecution.FlightNo 
             AND DepartureDateAndTimeUTC = flightexecution.DepartureDateAndTimeUTC)
    ELSE -1 
END

En fin de compte, on pourrait complètement remanier ce processus en une seule instruction SELECT :

SELECT CASE WHEN COUNT(crew.EmployeeID) > 0 
            THEN COUNT(crew.EmployeeID) 
            ELSE -1 
       END AS Result
FROM crew
JOIN flightexecution ON crew.FlightNo = flightexecution.FlightNo
WHERE FlightNo = flightexecution.FlightNo AND 
      DepartureDateAndTimeUTC = flightexecution.DepartureDateAndTimeUTC

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X