Requête trop lente pour le scriptJ'ai utilisé Query Builder pour scripter plusieurs requêtes. Ensuite, j'ai placé ces scripts dos à dos. Ensuite, je souhaite travailler avec les nouvelles tables de données formées à partir des requêtes.
Mon problème est que l'une des requêtes prend plus de 10 secondes à s'exécuter et que le JSL qui suit les requêtes essaie de fonctionner avec la table "à former" (qui n'est pas là lorsque le script arrive à cette partie du code) . Cela provoque évidemment une erreur et quitte le script.
J'ai essayé d'utiliser la commande "Exécuter en arrière-plan", mais cela semble simplement mettre fin au script.
Avez-vous des idées sur la façon dont je peux exécuter les requêtes et forcer un WAIT jusqu'à ce que toutes les requêtes aient renvoyé leurs tables avant d'exécuter le reste du script (qui agit sur ces tables) ?
Merci,
Martin
Re : Requête trop lente pour le scriptDésolé, je suis arrivé en retard - la suggestion de Brian d'utiliser Exécuter au premier plan sur la requête en JSL est le moyen de garantir qu'une requête se termine avant l'exécution de la ligne suivante de JSL. Pas besoin de réécrire !
Éric
Re : Requête trop lente pour le scriptEn fait, c’est encore mieux d’utiliser Run Foreground.Désolé de ne pas avoir compris tout de suite, mais quelque chose comme :
Requête1 = Nouvelle requête SQL (
Connexion (...
) ,
Commandé par ( ) ,
PostQueryScript (...
)
) ;
Requête1 << Exécuter au premier plan ;
devrait marcher.
Brian
Re : Requête trop lente pour le scriptSalut Martin,
Vous pouvez également essayer de désactiver les opérations en arrière-plan pour les requêtes.Cela a fonctionné pour moi.Vous pouvez soit aller dans "Préférences->Query Builder->ODBC->Exécuter des requêtes en arrière-plan lorsque cela est possible" et décocher cela, soit dans le script, vous pouvez faire quelque chose comme :
Paramètres du générateur de requêtes (requête en arrière-plan (0))
En haut de votre script.
Brian Corcoran
Développement JMP
Re : Requête trop lente pour le scriptMerci beaucoup, pmroz !!!! Cela nécessite un peu de réécriture, mais fonctionne à merveille !
Re : Requête trop lente pour le scriptJe vais essayer cela et vous ferai savoir comment cela se passe.
Merci
Re : Requête trop lente pour le scriptJe soupçonne que le requête << Exécuter revient immédiatement. Je ne sais pas comment vous pourriez synchroniser cela.
j'utilise exécuter SQL au lieu de cela, et cela semble attendre la fin avant d'avancer dans le script. Par exemple, si vous aviez 4 instructions SQL à exécuter :
dbc = create database connection(<CONNECTION-STRING>);
dt1 = execute sql(dbc, sql1);
dt2 = execute sql(dbc, sql2);
dt3 = execute sql(dbc, sql3);
dt4 = execute sql(dbc, sql4);
close database connection(dbc);</CONNECTION-STRING>
Re : Requête trop lente pour le scriptOui. Wait(0) ne fait pas ce que vous suggérez. Les requêtes sont en fait renvoyées dans un ordre aléatoire, en fonction de (ce qui semble être) leur taille et leur complexité. J'ai 7 requêtes et c'est la 4ème qui prend beaucoup de temps. J'ai essayé de mettre cette requête en premier dans le script, mais les autres s'exécutent si vite que celle-ci n'est toujours pas terminée lorsque le code restant du script s'exécute.
Voici une partie du code que j'utilise, dont une grande partie a été supprimée pour protéger la source. Mais cela donne la structure générale. J'ai supprimé les requêtes 4 à 7 et les 4 dernières instructions Join à la fin par souci de concision.
Requête1 = Nouvelle requête SQL (
Connexion (...
) ,
Commandé par ( ) ,
PostQueryScript (...
)
) ;
Requête1 << Courir ;
Attendez ( 0 ) ;
Requête2 = Nouvelle requête SQL (
Connexion (...
) ,
Commandé par ( ) ,
PostQueryScript (...
)
) ;
Requête2 << Courir ;
Attendez ( 0 ) ;
Requête3 = Nouvelle requête SQL (
Connexion (...
) ,
Commandé par ( ) ,
PostQueryScript (...
)
) ;
Requête3 << Courir ;
Attendez ( 0 ) ;
//Joindre des tables
Tableau12 = Tableau de données ( "01" ) << Rejoindre (
Avec ( Tableau de données ( "02" ) ) ,
Fusionner les colonnes du même nom,
Drapeau de match ( 0 ) ,
Par colonnes correspondantes (
:
) ,
Supprimer les multiples ( 0 , 0 ) ,
Inclure les non-correspondances ( 0 , 0 ) ,
Conserver l'ordre de la table principale ( 1 ) ,
Tableau de sortie ( "12" )
) ;
Tableau123 = Tableau de données ( "12" ) << Rejoindre (
Avec ( Tableau de données ( "03" ) ) ,
Fusionner les colonnes du même nom,
Drapeau de match ( 0 ) ,
Par colonnes correspondantes (
:
) ,
Supprimer les multiples ( 0 , 0 ) ,
Inclure les non-correspondances ( 0 , 0 ) ,
Conserver l'ordre de la table principale ( 1 ) ,
Tableau de sortie ( "123" )
) ;
Re : Requête trop lente pour le scriptAvez-vous mis un wait(0); commande après chaque récupération ? Cela devrait forcer JMP à attendre la fin de la ou des commandes précédentes.