2011-04-30 4 views
1

Mon programme restaure une base de données MySQL à partir d'un fichier SQL. Si je voulais afficher la progression de l'exécution SQL dans mon programme, je devrais connaître le nombre d'instructions SQL dans le fichier. Comment puis-je faire cela en MySQL? (Les requêtes peuvent être constituées d'instructions d'insertion multi-lignes spécifiques à mysql)Comment compter le nombre d'instructions SQL dans un fichier texte?

Je pourrais utiliser les outils de ligne de commande MySQL ou l'API Python. Vous pouvez également publier des solutions pour d'autres SGBD.

+1

En fonction de vos données SQL, une 'instruction' peut être simple ou complexe, avec beaucoup de données ou sans ... donc votre indicateur de progression peut ne pas être très cohérent. – Henry

+0

Je suis bien conscient des limites de cette approche basée sur le nombre de requêtes, mais sinon, comment afficheriez-vous la progression en% ou avec une barre de progression? – Imran

Répondre

4

La manière simple (et facile): Ajoutez des instructions PRINT à votre fichier de script SQL, en affichant des messages de progression.

L'avantage (mis à part le fait évident qu'il est difficile d'analyser des constructions multi-instructions) est que vous obtenez un contrôle précis de la progression. Par exemple, certaines instructions peuvent prendre beaucoup plus de temps que d'autres, vous devrez donc les peser.

Je ne penserais pas à la progression en termes de nombre d'instructions exécutées. Ce que je fais est d'imprimer des commentaires que des tâches spécifiques ont été commencées et terminées, telles que 'Synchronizing Table' blah '', 'Mise à jour de la procédure stockée X' etc

2

La solution naïve est de compter le nombre de points-virgules dans le fichier (ou tout autre caractère utilisé comme délimité dans le fichier).

Cela fonctionne généralement assez bien, sauf lorsque les données que vous insérez ont beaucoup de points-virgules et que vous devez commencer à traiter l'analyse réelle des SQL, ce qui est un casse-tête.

Questions connexes