IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Oracle Discussion :

Procedure problème DBMS_OUTPUT.PUT


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Par défaut Procedure problème DBMS_OUTPUT.PUT
    Bonsoir, je bloque depuis tout à l'heure sur un problème d'affichage.
    Je ne comprend pas pourquoi les étoiles ne s'affichent pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    CREATE OR REPLACE PROCEDURE affiche(nom Fournisseur.nomFournisseur%TYPE, etoile INTEGER)
    IS
    BEGIN
      DBMS_OUTPUT.PUT_LINE(nom ||'      ');
      FOR i IN 1 .. etoile LOOP
        DBMS_OUTPUT.PUT('*');
      END LOOP;
    END;
    /
    Pas d'érreurs, mais l'execution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SQL> exec affiche('azerty',3);
    azerty
     
    PL/SQL procedure successfully completed.
    Je précise que j'ai activé SET SERVEROUTPUT ON.
    Voilà , merci.

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Par défaut
    Vous pouvez par exemple ajouter DBMS_OUTPUT.NEW_LINE après la boucle pour vider le buffer et provoquer le saut de ligne.

    Voir la doc. de référence de DBMS_OUTPUT.PUT.

  3. #3
    Membre éclairé Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Par défaut
    Ca n'a rien changé, j'ai toujours

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SQL> exec affiche('azerty',3);
    azerty
    PL/SQL procedure successfully completed
    Au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SQL> exec affiche('azerty',3);
    azerty       ***
    Je ne comprend pas pourquoi ce qui est dans la boucle ne s'affiche pas, il doit y avoir une subtilité qui m'échappe.

  4. #4
    Expert confirmé
    Homme Profil pro
    Big Data / Freelance EURL
    Inscrit en
    Mars 2003
    Messages
    2 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Big Data / Freelance EURL

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 124
    Par défaut
    et c'est quoi le type correspondant à Fournisseur.nomFournisseur%TYPE ?
    ça serait pas un char très long au lieu d'un varchar ? donc on pourrait essayer en trimant le nom et/ou en modifiant le type ?

  5. #5
    Membre éclairé Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Par défaut
    Un VARCHAR2(128), je pense pas que ce soit énorme.
    Qu'en pensez-vous?

    De plus ma procédure est appelée dans par une autre procédure, mais dans l'exemple je l'ai testée manuellement avec un simple :
    exec affiche(....);

    A la place du fournisseur j'ai mis un mot court : azerty.

    Donc voilà, je ne vois pas ce qui cloche.

  6. #6
    Expert confirmé
    Homme Profil pro
    Big Data / Freelance EURL
    Inscrit en
    Mars 2003
    Messages
    2 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Big Data / Freelance EURL

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 124
    Par défaut
    ah ok.
    Non pour moi le problème serait venu d'un char. Mais si c'est un varchar2 on n'aura pas le problème d'espaces en trop à droite.

    Après il faudrait peut-être expliquer le problème plus dans son ensemble. Dbms_output c'est seulement pour faire du débuggage. On peut sans doute répondre à ton problème d'une autre façon ?

  7. #7
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 354
    Par défaut
    Citation Envoyé par juve1897 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SQL> exec affiche('azerty',3);
    azerty       ***
    Je ne comprend pas pourquoi ce qui est dans la boucle ne s'affiche pas, il doit y avoir une subtilité qui m'échappe.
    Non la procédure n'est pas censée donner ça étant donné que tu utilise put_line() et non put() au départ.

    En tout cas sur ma base ça fonctionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    set serveroutput on
    
    CREATE OR REPLACE PROCEDURE affiche(nom Varchar2, etoile INTEGER)
    IS
    BEGIN
      DBMS_OUTPUT.PUT(nom ||'      ');
      FOR i IN 1 .. etoile LOOP
        DBMS_OUTPUT.PUT('*');
      END LOOP;
      DBMS_OUTPUT.NEW_LINE;
    END;
    /
    
    PROCEDURE affiche(nom Compiled.
    exec affiche('azerty', 4)
    
    anonymous block completed
    azerty      ****

  8. #8
    Membre expérimenté Avatar de Laurent_du_78
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    138
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Juin 2007
    Messages : 138
    Par défaut
    Je fait remonter un ancien post.

    il faut mettre
    SET serveroutput on et SET feedback 0

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SQL> exec affiche('azerty', 4)
     
    PL/SQL procedure successfully completed.
     
    SQL>  SET serveroutput on
    SQL>  exec affiche('azerty', 4)
    azerty      ****
     
    PL/SQL procedure successfully completed.
     
    SQL>  SET feedback 0
    SQL>  exec affiche('azerty', 4)
    azerty      ****

Discussions similaires

  1. trigger procedure probléme
    Par devone dans le forum Requêtes
    Réponses: 3
    Dernier message: 19/05/2011, 10h50
  2. Réponses: 4
    Dernier message: 13/12/2006, 00h08
  3. problème dbms_output .put
    Par lazzeroni dans le forum Oracle
    Réponses: 5
    Dernier message: 27/06/2006, 15h34
  4. Problème dans une procedure
    Par hpghost dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 09/01/2005, 12h14
  5. [PowerBuilder/Oracle] Problème de procedure stockée
    Par delphine_lep dans le forum Powerbuilder
    Réponses: 1
    Dernier message: 02/09/2004, 14h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo