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

PL/SQL Oracle Discussion :

Procédure qui affiche le temps d'une requête


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 148
    Par défaut Procédure qui affiche le temps d'une requête
    bonjour à tous,je dois créer une procédure qui reçoit en paramètres une requête sql et ma procédure doit afficher son temps d'exécution en minutes,secondes,millisecondes.J'ai testé la fonction get_time mais j'ai un problème voici ma procédure incomplète.--->
    create procedure test (param in varchar2) is
    v_start number;
    v_stop number;
    begin
    v_start:=dbms_utility.get_time;
    -- j'execute ma requête recu en paramètres
    v_stop:=dbms_output.get_time;
    dbms_output.put_line(v_stop - v_start)--> ca me retourne 0
    end;

    Pouvez vous m'expliquer pourquoi le temps est identique pour les 2 ?? et si vous avez une solution je suis preneur!! Merci

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Août 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 270
    Par défaut
    Citation Envoyé par chris_013 Voir le message
    bonjour à tous,je dois créer une procédure qui reçoit en paramètres une requête sql et ma procédure doit afficher son temps d'exécution en minutes,secondes,millisecondes.J'ai testé la fonction get_time mais j'ai un problème voici ma procédure incomplète.--->
    create procedure test (param in varchar2) is
    v_start number;
    v_stop number;
    begin
    v_start:=dbms_utility.get_time;
    -- j'execute ma requête recu en paramètres
    v_stop:=dbms_output.get_time;
    dbms_output.put_line(v_stop - v_start)--> ca me retourne 0
    end;

    Pouvez vous m'expliquer pourquoi le temps est identique pour les 2 ?? et si vous avez une solution je suis preneur!! Merci
    ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 148
    Par défaut
    desole je me suis trompé en tapant c bien dbms_utility sue j'ai dans mon code. pouvez vous m'aider?

  4. #4
    Membre expérimenté Avatar de DAB.cz
    Inscrit en
    Octobre 2006
    Messages
    221
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 221
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SQL> declare
      2    v_start number;
      3    v_stop number;
      4  begin
      5    v_start:=dbms_utility.get_time;
      6    -- j'execute ma requete recu en parametres
      7    for i in 1 .. 10000000 loop
      8      null;
      9    end loop;
     10    v_stop:=dbms_utility.get_time;
     11    dbms_output.put_line(v_stop - v_start);
     12  end;
     13  /
    97
    Citation Envoyé par chris_013 Voir le message
    Pouvez vous m'expliquer pourquoi le temps est identique pour les 2 ?? et si vous avez une solution je suis preneur!! Merci
    Parce que la requête est vite? Comment tu la lance?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 148
    Par défaut
    via la commande EXECUTE IMMEDIATE...ce qui est bizarre c'est que quand j'active le set timing on pour la requete il m'affiche au moins quelques millisecondes mais lorsque je la teste dans ma procédure les temps start et stop sont identiques

  6. #6
    Membre expérimenté Avatar de DAB.cz
    Inscrit en
    Octobre 2006
    Messages
    221
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 221
    Par défaut
    Citation Envoyé par chris_013 Voir le message
    via la commande EXECUTE IMMEDIATE...ce qui est bizarre c'est que quand j'active le set timing on pour la requete il m'affiche au moins quelques millisecondes mais lorsque je la teste dans ma procédure les temps start et stop sont identiques
    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
    SQL> set timing on
    SQL> set serveroutput on
    SQL> 
    SQL> declare
      2    v_start number;
      3    v_stop number;
      4  begin
      5    v_start:=dbms_utility.get_time;
      6    -- j'execute ma requete recu en parametres
      7    for i in 1 .. 10000000 loop
      8      null;
      9    end loop;
     10    v_stop:=dbms_utility.get_time;
     11    dbms_output.put_line(v_stop - v_start);
     12  end;
     13  /
    85
     
    Uplynulo: 00:00:00.88
    88 ms - c'est le temps du côté du client
    = temps d'exécution sur serveur (85 ms) + communication client-serveur + ...

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 148
    Par défaut
    j' ai testé votre procédure avec une requête -> il me retourne bien le temps que la procédure dure mais pas celui de la requête j'ai testé la requete hors procédure elle me retourne 00:00:00:09.
    j'exécute cette requête dans la procédure et elle me retourne comme nombre-> 48... je ne comprend pas?? Ou alors je convertis mal ma réponse en millisecondes ou alors je ne vois vraiment pas.. Merci pou votre aide!!!

  8. #8
    Membre expérimenté Avatar de DAB.cz
    Inscrit en
    Octobre 2006
    Messages
    221
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 221
    Par défaut
    Citation Envoyé par chris_013 Voir le message
    j' ai testé votre procédure avec une requête -> il me retourne bien le temps que la procédure dure mais pas celui de la requête j'ai testé la requete hors procédure elle me retourne 00:00:00:09.
    j'exécute cette requête dans la procédure et elle me retourne comme nombre-> 48... je ne comprend pas?? Ou alors je convertis mal ma réponse en millisecondes ou alors je ne vois vraiment pas.. Merci pou votre aide!!!
    Sans code (ou l'exemple) ce n'est pas possible trouver le problème (S'il existe). Quelle requête as tu?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    create or replace function xdelay return number is
    begin
      for i in 1 .. 100000000 loop
        null;
      end loop;
      return 1;
    end;
    /
    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
    SQL> declare
      2    v_start number;
      3    v_stop number;
      4    v_dummy number;
      5  begin
      6    v_start:=dbms_utility.get_time;
      7    -- j'execute ma requete recu en parametres
      8    execute immediate 'select xdelay from dual' into v_dummy;
      9    v_stop:=dbms_utility.get_time;
     10    dbms_output.put_line(v_stop - v_start);
     11  end;
     12  /
    804
    
    Uplynulo: 00:00:08.07
    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
    create or replace procedure ppp is
      v_start number;
      v_stop number;
      v_dummy number;
    begin
      v_start:=dbms_utility.get_time;
      -- j'execute ma requete recu en parametres
      execute immediate 'select xdelay from dual' into v_dummy;
      v_stop:=dbms_utility.get_time;
      dbms_output.put_line(v_stop - v_start);
    end;
    /
    
    SQL> exec ppp
    727
    Uplynulo: 00:00:07.30
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SQL> select xdelay from dual;
    
       XDELAY
    ---------
            1
    
    Uplynulo: 00:00:06.93
    Le temps oscille entre 5 et 11 secondes chez moi.

Discussions similaires

  1. Réponses: 9
    Dernier message: 09/05/2012, 22h38
  2. Réponses: 3
    Dernier message: 26/09/2011, 21h27
  3. Temps d'une requête
    Par Oberown dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 04/04/2006, 11h18
  4. appel d'une procédure qui renvoie le résultat d'une requete
    Par audreyc dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 16/03/2006, 14h02
  5. [MySQL] Une liste déroulante affichant les données d'une requête SHOW par ordre alphabétique
    Par jack_1981 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 22/12/2005, 15h53

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