Précédent   Forum des professionnels en informatique > Bases de données > Oracle > Outils
Outils Forum d'entraide sur les outils pour Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 31/08/2007, 09h53   #1
Membre Expert
 
Avatar de Lung
 
Analyste-programmeur
Inscription : mai 2002
Messages : 2 046
Détails du profil
Informations personnelles :
Âge : 32
Localisation : France, Yonne (Bourgogne)

Informations professionnelles :
Activité : Analyste-programmeur
Secteur : Industrie

Informations forums :
Inscription : mai 2002
Messages : 2 046
Points : 2 046
Points : 2 046
Par défaut [10g] Cherche outil pour débugguer procédure stockée

Voici mon problème :
J'ai une procédure stockée Oracle qui ne me renvoie pas le résultat attendu. Donc, je voudrais faire du pas-à-pas (avec des points d'arrêt conditionnels), et évaluer la valeur des variables.

- J'ai essayé avec SQL Développeur (version 1.1.2.25), mais au bout de 20 minutes, il est toujours en train de faire semblant d'exécuter ma procédure, et ne répond plus.
- J'ai téléchargé Toad free, mais je n'ai pas trouvé les outils de débugage. Je suppose qu'il faut la version payante, ce qui est exclu.

Quelqu'un connaitrait-il un autre outil (gratuit) pour débuguer ma procédure ?

__________________
L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai.
______________________________________________________________________________________________

Delphi 6#2 Entreprise - Delphi 2010 Architecte - Delphi XE2 Entreprise
Win XP Pro - OpenGL 2.1 - Oracle 11g - Firebird 2.5.0.2
Écrivez dans un français correct !!
Lung est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2007, 10h19   #2
Membre actif
 
Avatar de Loyd1974
 
Inscription : août 2007
Messages : 176
Détails du profil
Informations forums :
Inscription : août 2007
Messages : 176
Points : 172
Points : 172
PLSQL Developer
Alors c'est pas gratuit, mais on peut télécharger une version de démo complète valable pendant 30j, c'est largement suffisant pour tomber accro et faire des pieds et des mains pour que le père noël nous offre une licence :

http://www.allroundautomations.com/plsqldev.html
Loyd1974 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2007, 10h27   #3
Membre Expert
 
Avatar de Lung
 
Analyste-programmeur
Inscription : mai 2002
Messages : 2 046
Détails du profil
Informations personnelles :
Âge : 32
Localisation : France, Yonne (Bourgogne)

Informations professionnelles :
Activité : Analyste-programmeur
Secteur : Industrie

Informations forums :
Inscription : mai 2002
Messages : 2 046
Points : 2 046
Points : 2 046


Je vais voir ça ...
__________________
L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai.
______________________________________________________________________________________________

Delphi 6#2 Entreprise - Delphi 2010 Architecte - Delphi XE2 Entreprise
Win XP Pro - OpenGL 2.1 - Oracle 11g - Firebird 2.5.0.2
Écrivez dans un français correct !!
Lung est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2007, 10h45   #4
Membre Expert
 
Avatar de Lung
 
Analyste-programmeur
Inscription : mai 2002
Messages : 2 046
Détails du profil
Informations personnelles :
Âge : 32
Localisation : France, Yonne (Bourgogne)

Informations professionnelles :
Activité : Analyste-programmeur
Secteur : Industrie

Informations forums :
Inscription : mai 2002
Messages : 2 046
Points : 2 046
Points : 2 046
Bin, c'est pas intuitif tout ça ...

Comment on exécute une procédure ?
Comment on lui donne ses paramètres ?

(Pour les points d'arrêts conditionnel, je crois avoir trouvé)
__________________
L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai.
______________________________________________________________________________________________

Delphi 6#2 Entreprise - Delphi 2010 Architecte - Delphi XE2 Entreprise
Win XP Pro - OpenGL 2.1 - Oracle 11g - Firebird 2.5.0.2
Écrivez dans un français correct !!
Lung est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2007, 10h58   #5
Membre actif
 
Avatar de Loyd1974
 
Inscription : août 2007
Messages : 176
Détails du profil
Informations forums :
Inscription : août 2007
Messages : 176
Points : 172
Points : 172
Citation:
Envoyé par Lung Voir le message
Bin, c'est pas intuitif tout ça ...

Comment on exécute une procédure ?
Comment on lui donne ses paramètres ?

(Pour les points d'arrêts conditionnel, je crois avoir trouvé)
Tu ouvres le panneau navigateur, tu recherche ta procédure stockée, et avec le clic droit, tu l'ouvre en édition et tu poses tes points d'arrêts (ne pas oublié de le recompiler pour que cela soit pris en compte)

Ensuite, tu te positionnes sur le nom de ta procédure et tu fais clic-droit et tu choisis tester, il va te créer une fenêtre de test, tu renseignes les variables qui seront dans la liste en bas, et tu fais F9 (ou bien tu cliques sur le bouton symbolisé par un engrenage surmontée d'une loupe)

Il faut que tu ais les droits de débugger bien sûr, sinon, cela ne marche pas (c'est un GRANT à faire, si je me rappelle bien)

Tu peux télécharger la traduction en français, cela le rend plus facile d'accès, mais normalement, si tu codes ou débugges beaucoup, il va vite devenir indispensable
Loyd1974 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2007, 11h10   #6
Membre actif
 
Avatar de Loyd1974
 
Inscription : août 2007
Messages : 176
Détails du profil
Informations forums :
Inscription : août 2007
Messages : 176
Points : 172
Points : 172
Autre chose aussi, PLSQL developper va ouvrir une session par fenêtre dans son paramétrage par défaut, donc sans commit, tu ne vois pas dans une fenêtre le résultat d'un INSERT ou d'un update fait par une autre

Quand tu cliques sur nouveau, tu as plusieurs choix possible, les 4 principaux sont :
  • Fenêtre SQL : Cela simule une session SQL*PLUS, le résultat de la requête s'affiche directement en bas de la fenêtre
  • Fenêtre Test : celle qu'on utilise le plus, elle permet de définir des variables (déclarée avec les ":") et ainsi de tester package, procédure ou même simplement une requête avec différentes valeurs d'un filtre.Le résultat se trouve dans l'onglet Sortie DBMS si on fait du DBMS_OUTPUT ou dans l'onglet Sortie SQL, si on teste une requête simple. A noter, qu'un clic droit sur la partie de la fenetre où sont déclaré les variables permet d'accéder à la fonctionnalitées Analyser les variables qui va te créer directement toutes les variables définies dans ton code.
  • Fenêtre Plan d'exécution : porte bien son nom, un raccourci par défaut existe pour trouver le plan d'exécution d'une requête quand on est dans une fenêtre SQL, il s'agit de la touche F5 (la touche F8 étant le raccourci pour exécuter la requête)
  • Fenêtre Programme : à utiliser généralement quand on crée une fonction, un package ou autre à partir de rien.
Si tu as d'autres questions, n'hésite pas
Loyd1974 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2007, 11h13   #7
Membre Expert
 
Avatar de Lung
 
Analyste-programmeur
Inscription : mai 2002
Messages : 2 046
Détails du profil
Informations personnelles :
Âge : 32
Localisation : France, Yonne (Bourgogne)

Informations professionnelles :
Activité : Analyste-programmeur
Secteur : Industrie

Informations forums :
Inscription : mai 2002
Messages : 2 046
Points : 2 046
Points : 2 046
Citation:
Envoyé par Loyd1974 Voir le message
Ensuite, tu te positionnes sur le nom de ta procédure et tu fais clic-droit et tu choisis tester
Ah oui. Fallait le deviner ...

Bon, j'ai fais comme tu m'a dis.
L'exécution démarre, et là il me dit que la variable de ma condition (du point d'arrêt) n'est pas défini.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
   begin
      FOR Cur IN (SELECT HIST_CONTENANT.* FROM HIST_CONTENANT, TYPE_CONTENANT
                  WHERE HIST_CONTENANT.ID_TYPE_CONTENANT = TYPE_CONTENANT.ID_TYPE_CONTENANT
                  AND ID_FAMILLE_CONTENANT = 1) loop
         begin
            -- Recherche du premier mouvement.
            begin
               SELECT DATE_OPE INTO DateOperation  <-- Point d'arrêt ICI : condition : Cur.CODE_CONTENANT = 'H0029556700'
               FROM (
                  SELECT DATE_OPE, min(INDICE)
                  FROM HIST_MVT_CONT
                  WHERE CODE_CONTENANT = Cur.CODE_CONTENANT
                  AND ROWNUM = 1
                  GROUP BY DATE_OPE);
            exception
               when OTHERS then
                  raise_application_error(-20005, SQLERRM);
            end;
 
...
Je ne comprend pas ce qu'il réclame, sachant que ma procédure fonctionne.
Je l'ai déjà exécutée plusieurs fois sans problème.


Citation:
Envoyé par Loyd1974 Voir le message
Tu peux télécharger la traduction en français, cela le rend plus facile d'accès, mais normalement, si tu codes ou débugges beaucoup, il va vite devenir indispensable
C'est sûr que si j'arrive à débuguer comme je veux, je ne pourrai plus m'en passer. Mais, comme c'est payant, il faudra bien ...
__________________
L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai.
______________________________________________________________________________________________

Delphi 6#2 Entreprise - Delphi 2010 Architecte - Delphi XE2 Entreprise
Win XP Pro - OpenGL 2.1 - Oracle 11g - Firebird 2.5.0.2
Écrivez dans un français correct !!
Lung est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2007, 11h19   #8
Membre actif
 
Avatar de Loyd1974
 
Inscription : août 2007
Messages : 176
Détails du profil
Informations forums :
Inscription : août 2007
Messages : 176
Points : 172
Points : 172
Voici ce que dit la doc à propose des conditions des points d'arrêts :

Utiliser condition – La case à cocher active ou désactive la condition. La condition doit être une expression booléenne. Lorsque la ligne du point d'arrêt est atteinte, l'exécution est interrompue uniquement si la condition est vraie. Vous pouvez utiliser n'importe quelle expression SQL dans la condition, et vous pouvez utiliser n'importe quelle variable connue à l'emplacement du point d'arrêt. Il s'agit des mêmes variables que celles que vous pouvez visionner ou définir au cours d'un débogage interactif. Les variables doivent être précédées d'un double point. Par exemple upper(:ename) = ‘
SMITH’ est une condition valide si ename est une variable valide à l'emplacement du point d'arrêt.

Est-ce que tu as bien mis les double point ?
Loyd1974 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2007, 11h31   #9
Membre Expert
 
Avatar de Lung
 
Analyste-programmeur
Inscription : mai 2002
Messages : 2 046
Détails du profil
Informations personnelles :
Âge : 32
Localisation : France, Yonne (Bourgogne)

Informations professionnelles :
Activité : Analyste-programmeur
Secteur : Industrie

Informations forums :
Inscription : mai 2002
Messages : 2 046
Points : 2 046
Points : 2 046
Citation:
Envoyé par Loyd1974 Voir le message
Est-ce que tu as bien mis les double point ?

Pas pensé aux deux-points.

Ca s'exécute ...

__________________
L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai.
______________________________________________________________________________________________

Delphi 6#2 Entreprise - Delphi 2010 Architecte - Delphi XE2 Entreprise
Win XP Pro - OpenGL 2.1 - Oracle 11g - Firebird 2.5.0.2
Écrivez dans un français correct !!
Lung est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2007, 11h55   #10
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 450
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 450
Points : 4 209
Points : 4 209
Si c'est juste pour voir des variables, tu as toujours l'option du DBMS_OUPUT.
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2007, 14h57   #11
Membre Expert
 
Avatar de Lung
 
Analyste-programmeur
Inscription : mai 2002
Messages : 2 046
Détails du profil
Informations personnelles :
Âge : 32
Localisation : France, Yonne (Bourgogne)

Informations professionnelles :
Activité : Analyste-programmeur
Secteur : Industrie

Informations forums :
Inscription : mai 2002
Messages : 2 046
Points : 2 046
Points : 2 046
Citation:
Envoyé par McM Voir le message
Si c'est juste pour voir des variables, tu as toujours l'option du DBMS_OUPUT.
C'est vrai, mais c'est moins pratique.

Bon Loyd1974, PLSQL Developper fonctionne, mais pas vite.
Il a mit plus de 3 heures pour faire tourner ma procédure qui en exécution normale, met moins de 5 minutes. Mais, lui au moins, il a pas planté comme SQL Developper d'Oracle.

__________________
L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai.
______________________________________________________________________________________________

Delphi 6#2 Entreprise - Delphi 2010 Architecte - Delphi XE2 Entreprise
Win XP Pro - OpenGL 2.1 - Oracle 11g - Firebird 2.5.0.2
Écrivez dans un français correct !!
Lung est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2007, 15h16   #12
Membre actif
 
Avatar de Loyd1974
 
Inscription : août 2007
Messages : 176
Détails du profil
Informations forums :
Inscription : août 2007
Messages : 176
Points : 172
Points : 172
Citation:
Envoyé par Lung Voir le message
Bon Loyd1974, PLSQL Developper fonctionne, mais pas vite.
Il a mit plus de 3 heures pour faire tourner ma procédure qui en exécution normale, met moins de 5 minutes. Mais, lui au moins, il a pas planté comme SQL Developper d'Oracle.

Whaouh, aussi long !!
Bon, c'est vrai que je ne développe plus trop et que je fais rarement du débogage mais je n'ai jamais eu de tels comportements
C'est peut être le breakpoint conditionné ? Je n'ai jamais utilisé cette option ...mystère
Il faudrait voir si au lieu de mettre un breakpoint conditionné, tu pourrais mettre un IF dans ton code avec une ligne bidon qui sera ton breakpoint et de là, tu pourras faire du pas à pas. Peut-être qu'ainsi ce sera plus rapide ?
Loyd1974 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h51.


 
 
 
 
Partenaires

Hébergement Web