0

J'ai une procédure stockée qui rend les jointures très complexes et renvoie 1 ligne de données (LIMIT 1 est utilisé). Dans ma demande, j'utilise ensuite ces données pour faire des calculs. De cette façon, j'essaie de garder la logique métier hors des procédures stockées. Mais maintenant j'ai besoin d'obtenir ces données dans une autre fonction stockée pour faire aussi quelques calculs. La raison pour laquelle je veux créer la fonction stockée est qu'elle sera appelée dans une autre requête qui contient des milliers de lignes.MySQL: Comment obtenir les résultats d'une procédure stockée dans une fonction stockée?

Est-ce possible? Je ne veux pas dupliquer la logique de jointure complexe dans la fonction stockée ... La seule solution que je vois est d'utiliser les paramètres de sortie.


-----------------------------------
PS. J'ai décidé de vous expliquer ma situation, peut-être que vous me proposerez une autre décision.

Je dois calculer le prix du droit de livraison payé (c'est le prix final, y compris l'emballage, la livraison et le dédouanement) des marchandises. Le calcul de ce prix de livraison payé est un peu complexe, et je ne veux pas garder une logique complexe dans mes procédures et fonctions stockées. J'ai donc créé une procédure stockée qui sélectionne toutes les données nécessaires pour faire le calcul du prix et j'utilise ces données dans mon application pour calculer le prix. Pour l'instant tout fonctionne bien.

Mais maintenant, je dois créer une liste de prix avec les frais de livraison payés et nous avons des milliers de biens. Donc, si j'appelle ma procédure stockée pour chaque transaction, il faudra des milliers d'allers-retours au serveur. C'est pourquoi je veux créer une fonction qui appellera la procédure stockée et calculera le prix basé sur les données retournées. Et puis je veux l'utiliser comme ceci:
SELECT Description, blablabla, Weight, ..., GetDeliveryDutyPaidPrice (...) FROM pricelist;

Des idées?

Répondre

1

Au lieu d'une procédure stockée, faites-en une vue. Cela devrait résoudre vos problèmes.

EDIT:

Pour être précis, ce que vous voulez faire est de créer une vue qui contient toutes les colonnes que vous utilisez dans vos calculs. Une vue est similaire à une procédure stockée car elle permet au moteur de base de données sous-jacent d'optimiser ses performances, mais elle peut être interrogée de la même manière qu'une table normale, à l'aide d'une clause WHERE. Ainsi, votre implémentation sous-jacente de vos tables ne peut avoir que les colonnes dont chaque table a besoin (simplifiant ainsi votre schéma), mais la vue peut composer toutes les différentes colonnes des différentes tables en une seule "vue tabulaire" qui peut être interrogée en utilisant la clause WHERE. De cette façon, vous pouvez bénéficier des procédures stockées (optimiser vos jointures SQL pour les jointures les plus utilisées) et pouvoir filtrer vos résultats de manière appropriée (en utilisant la clause WHERE) tout en conservant votre logique hors de votre base de données.

Vraiment. Les vues sont une très très très bonne chose. Utilise les.

+0

J'ai des paramètres d'entrée pour cette procédure stockée. Comment une vue peut-elle aider? Pouvez-vous s'il vous plaît expliquer plus en détail? – nightcoder

+0

Quels sont les paramètres d'entrée pour cette procédure stockée? Si vous avez besoin des paramètres d'entrée pour générer la ligne de sortie, avez-vous vraiment réussi à garder la logique métier hors de vos procédures stockées? –

+0

Eh bien, les paramètres d'entrée sont nécessaires uniquement pour les jointures et où la clause – nightcoder

Questions connexes