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*Plus Oracle Discussion :

[Oracle 8i] Pause à l'exécution d'une proc stockée sous sqlplus


Sujet :

Sql*Plus Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    507
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 507
    Par défaut [Oracle 8i] Pause à l'exécution d'une proc stockée sous sqlplus
    Bonjour.

    J'ai une procédure stockée proc.sql que je lance sous SqlPlus. J'aimerais qu'elle fasse une pause pendant l'exécution, continuée par l'appui d'une touche (ou autre).

    J'ai pensé à ACCEPT mais cela ne rentre pas dans un bloc PL/SQL.

    Une idée? (si c'est réalisable)

    Merci

  2. #2
    Membre éclairé

    Inscrit en
    Septembre 2003
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 425
    Par défaut
    Je ne sais pas comment rendre un pl/sql interactif à ma connaissance c'est impossible.
    Cependant tu peux jouer avec un flag.

    proc.sql:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    while f_ret_flag=0 loop
    end loop;
    f_ret_falg retourne une valeur stocké dans une table par exemple.

    Sinon tu peux donner un temps d'attente et faire un boucle aussi.

  3. #3
    Membre habitué
    Inscrit en
    Septembre 2006
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 17
    Par défaut
    Bonjour
    Pourquoi ne pas découper les steps de ton bloc en plusieurs bloc PL/SQL et entre mettre un bloc pause

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    507
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 507
    Par défaut
    Le but est de déboguer une proc qui tourne sans fin, en affichant les messages au fur et à mesure (donc en vidant le buffer au fur et à mesure), et de suivre le moment où la boucle se perd.
    J'ai utilisé une méthode un peu lourde: j'insère des commentaires dans une table en faisant un commit après chaque insertion. Efficace mais oblige à alourdir le code momentanément.

    Du coup, j'ai 3 questions:

    1) Comment vider le buffer instantanément, c'est-à-dire afficher un dbms_output.put_line dès qu'on le rencontre?

    2) sygale, comment donnes-tu un temps d'attente?

    3) free people, tu peux m'expliquer ton point de vue?

    Merci.

  5. #5
    Membre habitué
    Inscrit en
    Septembre 2006
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 17
    Par défaut
    Ta procédure execute deux steps : steps1 et steps2

    tu veux faire une pause entre ces deux blocs

    tu divise ces deux blocs entre deux proc et tu fais un pause entre

    le pause arrête l'execution de quelque chose jusqu' a ce que tu tapes sur une touches

    mon script test.sql
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    set serveroutput on 
     
    begin 
    	dbms_output.put_line ('test1') ; 
    end ; 
    /
     
    pause 
     
    begin 
    	dbms_output.put_line ('test2') ; 
    end ; 
    /
    j'exécute mon script :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SQL> start c:\test.sql 
    test1
     
    Procédure PL/SQL terminée avec succès.
    il attend que je tape sur entrée pour continuer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Entrée limitée à 1 caractères
    test2
     
    Procédure PL/SQL terminée avec succès.

  6. #6
    Membre éclairé

    Inscrit en
    Septembre 2003
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 425
    Par défaut
    Citation Envoyé par GoLDoZ
    1) Comment vider le buffer instantanément, c'est-à-dire afficher un dbms_output.put_line dès qu'on le rencontre?
    C'est impossible, sinon fait une trace dans un fichier avec la package utl_file, il doit y avoir des exemples déjà posté

    Citation Envoyé par GoLDoZ
    2) sygale, comment donnes-tu un temps d'attente?
    Pour un temps d'attente tu peux faire un truc comme ca par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    wtemps pls_integer :=15 --tps en minutes'
    wdat_fin date;
    begin
    wdat_fin:=sysdate + (wtemps/24/60);
    do while sysdate<wdat_fin loop
    --ras'
    end loop;
    end;
    J'ai pas vérifier le code

  7. #7
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2006
    Messages : 133
    Par défaut
    Petite suggestion :
    Pour pouvoir tracer en temps reel l'execution de vos programes, vous pouvez utiliser le package : DBMS_APPLICATION_INFO.

    Exemple de ce que vous pouvez inserer dans le code PL:

    /* Debut de programme */
    DBMS_APPLICATION_INFO.SET_MODULE('Mon prog','Initialisation');
    ....
    /* en cours de traitement */
    DBMS_APPLICATION_INFO.SET_ACTION('je suis au niveau XXX de ma boucle');


    ==> Une fois le programme lancé, il suffit de reperer votre session (ou s'execute le PL) : pour cela vous avez la vue v$session , il ne reste plus qu'à selectionner régulierement les champs renseignés par DBMS_APPLICATION_INFO :
    ACTION
    CLIENT_INFO
    MODULE ....

    On peut aussi determiner avec SET_SESSION_LONGOPS le niveau et le temps d'attente moyen en cours de traitement ....


    Bon courage

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 14/03/2014, 11h17
  2. Exécution d'une procédure stockée sous sql server 2000
    Par amirad dans le forum Développement
    Réponses: 2
    Dernier message: 27/04/2009, 09h50
  3. Exécution d'une proc stock sans ramener les données
    Par Yomen dans le forum Langage SQL
    Réponses: 1
    Dernier message: 02/04/2008, 23h11
  4. [SqlServer2000] Problème de temps d'exécution d'une proc stock
    Par GuillaumeBibaut dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 20/11/2006, 14h31
  5. Réponses: 7
    Dernier message: 10/02/2005, 13h44

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