Mon processus actuel de débogage des procédures stockées est très simple. Je crée une table appelée "debug" où j'insère des valeurs de variable à partir de la procédure stockée lors de son exécution. Cela me permet de voir la valeur de n'importe quelle variable à un moment donné du script, mais y a-t-il une meilleure façon de déboguer les procédures stockées MySQL?
mysql
database
debugging
stored-procedures
Maison Cory
la source
la source
Réponses:
Je fais quelque chose de très similaire à toi.
J'inclus généralement un paramètre DEBUG qui est par défaut false et que je peux définir sur true au moment de l'exécution. Enveloppez ensuite les instructions de débogage dans un bloc "If DEBUG".
J'utilise également une table de journalisation avec plusieurs de mes travaux afin de pouvoir revoir les processus et le calendrier. Mon code de débogage y est également envoyé. J'inclus le nom du paramètre appelant, une brève description, le nombre de lignes affectées (le cas échéant), un champ de commentaires et un horodatage.
Les bons outils de débogage sont l'un des tristes échecs de toutes les plates-formes SQL.
la source
La
debug_msg
procédure suivante peut être appelée pour simplement afficher un message de débogage sur la console:Ensuite, lancez le test comme ceci:
Cela entraînera la sortie suivante:
la source
INSERT INTO my_log_table (message) VALUES (msg)
et peut-être récupérer tous les messages de débogage qu'une fois les appels de fonction terminés (c'est-à-dire: vous êtes de retour dans la procédure)Oui, il existe un outil spécialisé pour ce genre de chose - MySQL Debugger .
la source
Comment déboguer une procédure stockée MySQL.
Débogueur pauvre de l'homme:
Créez une table appelée logtable avec deux colonnes
id INT
etlog VARCHAR(255)
.Effectuez l'auto-incrémentation de la colonne id.
Utilisez cette procédure:
Placez ce code partout où vous souhaitez enregistrer un message dans la table.
C'est un petit enregistreur rapide et sale pour comprendre ce qui se passe.
la source
Il existe des outils GUI pour le débogage des procédures / fonctions stockées et des scripts dans MySQL. Un outil décent qui dbForge Studio pour MySQL, a une fonctionnalité et une stabilité riches.
la source
Le débogueur pour mysql était bon mais ce n'est pas gratuit. C'est ce que j'utilise maintenant:
Utilisation dans une procédure stockée:
utilisation de la procédure stockée:
la source
Une autre manière est présentée ici
http://gilfster.blogspot.co.at/2006/03/debugging-stored-procedures-in-mysql.html
avec des procédures de débogage personnalisées mySql et des tables de journalisation.
Vous pouvez également simplement placer une simple sélection dans votre code et voir si elle est exécutée.
J'ai eu cette idée de
http://forums.mysql.com/read.php?99,78155,78225#msg-78225
Quelqu'un a également créé un modèle pour les procédures de débogage personnalisées sur GitHub.
Vois ici
http://www.bluegecko.net/mysql/debugging-stored-procedures/ https://github.com/CaptTofu/Stored-procedure-debugging-routines
A été mentionné ici
Comment attraper une exception dans les déclencheurs et stocker les procédures pour mysql?
la source
Je place simplement des instructions select dans les zones clés de la procédure stockée pour vérifier l'état actuel des ensembles de données, puis je les commente (--select ...) ou les supprime avant la production.
la source
Je suis en retard à la fête, mais j'ai apporté plus de bière:
http://ocelot.ca/blog/blog/2015/03/02/the-ocelotgui-debugger/ et https://github.com/ocelot-inc/ocelotgui
J'ai essayé, et cela semble assez stable, prenant en charge les points d'arrêt et l'inspection variable.
Ce n'est pas une suite complète (seulement 4,1 Mo) mais m'a beaucoup aidé!
Comment cela fonctionne: Il s'intègre à votre client mysql (j'utilise Ubuntu 14.04), et après avoir exécuté:
Il installe une nouvelle base de données sur votre serveur, qui contrôle le processus de débogage. Alors:
vous donnera une chance de parcourir pas à pas votre code, et de "rafraîchir" vos variables, vous pourrez mieux voir ce qui se passe dans votre code.
Conseil important: lors du débogage, vous allez peut-être changer (recréer la procédure). Après une recréation, exécutez: $ exit et $ setup avant un nouveau $ debug
Il s'agit d'une alternative aux méthodes "insert" et "log". Votre code reste exempt d'instructions de "débogage" supplémentaires.
Capture d'écran:
la source
MySQL Connector / Net 6.6 a une fonctionnalité pour déboguer les procédures et fonctions stockées
la source
MySql Connector / NET comprend également un débogueur de procédure stockée intégré dans Visual Studio à partir de la version 6.6, vous pouvez obtenir le programme d'installation et la source ici: http://dev.mysql.com/downloads/connector/net/
Quelques documents / captures d'écran: https://dev.mysql.com/doc/visual-studio/en/visual-studio-debugger.html
Vous pouvez suivre les annonces ici: http://forums.mysql.com/read.php?38,561817,561817#msg-561817
MISE À JOUR: MySql for Visual Studio a été séparé de Connector / NET en un produit distinct, vous pouvez le choisir (y compris le débogueur) à partir d'ici https://dev.mysql.com/downloads/windows/visualstudio/1.2.html (toujours gratuit et open source).
AVERTISSEMENT: J'étais le développeur qui a créé le moteur de débogage des procédures stockées pour MySQL pour le produit Visual Studio.
la source
Le premier débogueur stable pour MySQL est dans dbForge Studio pour MySQL
la source
J'avais utilisé deux outils différents pour déboguer les procédures et les fonctions:
la source
La variable définie par l'utilisateur MySQL (partagée en session) peut être utilisée comme sortie de journalisation:
affichera:
la source
Toad mysql. Il existe une version freeware http://www.quest.com/toad-for-mysql/
la source
Réponse correspondant à ceci par @Brad Parks Je ne suis pas sûr de la version MySQL, mais la mienne était la version 5.6, d'où quelques travaux d'ajustement:
J'ai créé une fonction
debug_msg
qui est une fonction (pas une procédure) et renvoie du texte (aucune limite de caractères), puis j'appelle la fonction en tant que SELECTdebug_msg
(params) ASmy_res_set
, code comme ci-dessous:la source