|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : janvier 2003 Messages : 11 ![]() |
bonjour,
j'ai une base de données Firebird v2.0 que j'utilise avec isql. Toutes les requetes sont stockées dans un fichier texte. J'ai environ 150 requetes par fichie. Le problème est que celà prend beaucoup de temps car mes requêtes sont basées sur une recherche de clé primaire à partir de différentes chaines de caractères. Cette opération étant répétée à chaque requete, j'aimerais savoir s'il existe une solution pour que je fasse une requete (ou autre) pour récupérer cette clé primaire et utiliser le résultat dans les requetes suivantes. J'ai essayé avec une procédure stockée mais j'arrive pas à enregistrer le resultat dans une variable par exemple Je vous remercie par avance pour vos réponses. |
|
|
00
|
|
|
#2 |
|
Membre éprouvé
![]() Inscription : janvier 2009 Messages : 301 ![]() |
Bonjour,
Tu pourrais nous montrer le schéma de ton fichier texte et la procédure stockée que tu as écrite. Ainsi, il sera possible de t'aider car ta présentation ne m'as permis de comprendre ce qu tu souhaites réaliser. Bon courage |
|
|
00
|
|
|
#3 | ||
|
Invité de passage
![]() Inscription : janvier 2003 Messages : 11 ![]() |
Alors voilà le bazar, donc dans le fichier, tu trouveras pleins de fois la requête :
Code :
SELECT TApp.id FROM TGenerateur JOIN TConteneur ON TConteneur.idGenerateur = TGenerateur.id JOIN TApp ON TApp.idConteneur = TConteneur.id WHERE TGenerateur.nomGenerateur = 'P4' AND TConteneur.idConteneur = 2 AND TApp.nom = '104X2 A'); Code :
INSERT INTO TEquipPack(nomPack,idApp) VALUES (NULL, (SELECT TApp.id FROM TGenerateur JOIN TConteneur ON TConteneur.idGenerateur = TGenerateur.id JOIN TApp ON TApp.idConteneur = TConteneur.id WHERE TGenerateur.nomGenerateur = 'P4' AND TConteneur.idConteneur = 2 AND TApp.nom = '104X2 A')); Code :
toto = SELECT TApp.id FROM TGenerateur JOIN TConteneur ON TConteneur.idGenerateur = TGenerateur.id JOIN TApp ON TApp.idConteneur = TConteneur.id WHERE TGenerateur.nomGenerateur = 'P4' AND TConteneur.idConteneur = 2 AND TApp.nom = '104X2 A'); Code :
INSERT INTO TEquipPack(nomPack,idApp) VALUES (NULL, toto); set term ^^; Code :
J'espère que cela est plus clair... |
||
|
|
00
|
|
|
#4 | ||||
|
Membre éprouvé
![]() Inscription : janvier 2009 Messages : 301 ![]() |
Bonjour,
Je ne suis pas certain d'avoir tout compris, mais je vais essayer de d'aider. A mon avis, la procédure stockée ne doit retourner qu'une seule valeur, elle ne doit pas comporter les instructions FOR et DO. Je pense que ce schéma conviendrait mieux. Code :
Code :
Pour aller plus loin, il faudrait que je comprenne complétement le schéma de l'application. Pourquoi, tu utilises ISQL, il existe des outils plus performants et gratuits. IBExpert Free, Flamerobin, Database Workbench 4 Lite for Firebird, etc. Il me semble plus facile de faire des essais avec ces produits. Enfin, il s'agit d'une question d'habitudes. Bon courage |
||||
|
|
00
|
|
|
#5 |
|
Invité de passage
![]() Inscription : janvier 2003 Messages : 11 ![]() |
Merci pour votre réponse.
Pour le moment, je pense que votre solution fonctionne mais comment je fais pour stocker le résultat de la procédure stockée afin qu'effectivement je puisse passer directement dans mes requêtes les différents paramètres ? |
|
|
00
|
|
|
#6 |
|
Membre éprouvé
![]() Inscription : janvier 2009 Messages : 301 ![]() |
Bonjour,
J'ai bien compris votre question. Je dois m'absenter, je regarde cet après-midi ou au plus tard demain pour vous répondre. Mais il n'y a pas aucune difficulté, je veux simplement faire quelques essais pour confirmation. A bientôt |
|
|
00
|
|
|
#7 | ||||||||
|
Membre Expert
![]() Frédéric Inscription : octobre 2002 Messages : 1 722 ![]() |
Bonjour,
Le choix d'ISQL est en effet étonnant, car c'est très 'Basic' comme utilisation. Si je comprend bien le problème vous souhaitez optimiser vos appels de requêtes, l'idée que vous avez serait de 'mémoriser' le résultat d'une requête qui est appelées de nombreuse fois en tant que sous-requêtes dans votre fichier. La procédure stockée ne "mémorise" pas le résultat. Elle permet simplement de grouper des requêtes. Mais à chaque appel de la procédure en question toutes les requêtes sont de nouveau exécutées. L'utilisation d'une procédure de type sélection peut se faire comme une table. Code :
Mais les résultats des PS ne sont pas mémorisés et donc à chaque appel (même avec les même paramètres) celle ci est exécuté de nouveau. Ainsi votre Code :
Code :
Par contre dans une PS vous pouvez avoir des variables locales. Donc si vous avez la possibilité de mettre toutes vos requêtes dans une PS vous allez normalement avoir un gain de vitesse : Par exemple : Code :
|
||||||||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com