2010-03-20 5 views
2

Je pensais utiliser une routine stockée pour nettoyer certaines de mes instructions SQL plus complexes. D'après ce que j'ai lu, il semble impossible d'utiliser une procédure stockée dans une instruction SQL, et une fonction stockée ne renvoie qu'une seule valeur lorsque ce dont j'ai besoin est un jeu de résultats. J'utilise mySQL v5.0Est-il possible d'appeler une procédure dans une instruction SQL?

SELECT p.`id`, gi.`id` 
FROM `sport`.`players` AS p JOIN `sport`.`gameinstances` AS gi 
ON p.`id` = gi.`playerid`      
WHERE (p.`playerid` IN (CALL findPlayers`("Canada", "2002"))) 
    AND (gi.`instanceid` NOT IN (CALL findGameInstances`("Canada", "2002"))); 

Par exemple, les «findPlayers de les procédures et les « findGameInstances » sont stockées sont des routines qui exécutent certains SQL et retourne un jeu de résultats. Je préférerais ne pas inclure leur code directement dans la déclaration ci-dessus.

Répondre

2

Je ne sais pas si MySQL peut utiliser ces techniques, mais dans le serveur sql je voudrais essayer une des deux choses différentes (au moins il pourrait vous donner quelque chose à rechercher dans e documentation emysql):

d'abord une valeur de table utilisée fonction définie puis rejoindre à celle en second lieu, insérer l'ensemble des résultats de la sp dans une table temporaire puis rejoindre à la table tem

Vous pouvez également envisager de mettre la logique complexe dans une vue et puis juste ajouter la clause where après avoir rejoint la vue. Cela ne fonctionnera pas si votre proc stocké fait des choses dynamiques qu'une vue ne peut pas faire, mais c'est une possibilité.

Questions connexes