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 :

Execution Requete Preparee


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 47
    Par défaut Execution Requete Preparee
    Bonjour,

    Je suis sous Oracle 10.2 et je développe une procédure stockée en PL/SQL
    qui doit executer une liste de requêtes préparées qui se trouve dans une table.
    Pour cela, après avoir sélectionnée la requête préparée dans la table, je l'execute avec un REF CURSOR.
    Le souci est que je dois connaitre à l'avance les champs retournés pour pouvoir utiliser REF CURSOR or toutes ces requêtes me retournent des champs différents à chaque fois.
    Auriez-vous une idée pour m'aider à rendre la solution générique ?
    Je joins un exemple du code test (en rouge, ce qui me pose problème):

    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
    20
    21
    22
    23
    24
    25
    procedure indicateur_test(ur_code quad_ur.code%type) as
    type Ref_Cur IS REF CURSOR;
    sql_stmt  LONG;
    cur       Ref_Cur;
    nidt      bde_sim_cellules.CODE_NIDT%type;
    nom       bde_sim_cellules.NOM%type;
    lac       bde_sim_cellules.LAC%type;
    etat      bde_sim_cellules.ETAT%type; 
    
    BEGIN
          SELECT texte_req into sql_stmt from quad_requete_total_erreurs where id_req=40;
          DBMS_OUTPUT.put_line('REQUETE 140 NB LIGNES : ' || SQL%ROWCOUNT);
          DBMS_OUTPUT.put_line('Requete total : ' || sql_stmt);
          OPEN cur FOR sql_stmt USING ur_code;
    
         LOOP
             FETCH  cur  INTO  nidt, nom, lac, etat;
             EXIT WHEN cur%NOTFOUND;
             -- DBMS_OUTPUT.put_line(nidt || nom || lac || etat);
          END LOOP;
    
          DBMS_OUTPUT.put_line('TOTAL : ' || cur%ROWCOUNT);         
          CLOSE cur;
    
    end indicateur_test;
    Merci d'avance

  2. #2
    Membre Expert Avatar de Garuda
    Homme Profil pro
    Chef de projet / Urbaniste SI
    Inscrit en
    Juin 2007
    Messages
    1 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet / Urbaniste SI
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 285
    Par défaut
    Pourquoi pas du sql dynamique (DBMS_SQl) ?

  3. #3
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 47
    Par défaut
    Merci de la réponse.
    Je pensais que DBMS_SQL était trop pénalisant au niveau du temps d'execution.

    J'ai modifié le code en m'inspirant du lien pour utiliser le dbms_sql mais si je demande l'affichage de row_processed. Il est à 0.

  4. #4
    Membre Expert Avatar de Garuda
    Homme Profil pro
    Chef de projet / Urbaniste SI
    Inscrit en
    Juin 2007
    Messages
    1 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet / Urbaniste SI
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 285
    Par défaut
    Code ?

  5. #5
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 47
    Par défaut
    désolé
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    create or replace
    procedure indicateur_test(ur_code quad_ur.code%type) as
    cur_hdl         NUMBER;
    rows_processed  NUMBER;
     
     
    BEGIN
          SELECT texte_req into sql_stmt from quad_requete_total_erreurs where id_req=40;
          DBMS_OUTPUT.put_line('Requete total : ' || sql_stmt);
     
       -- open cursor
       cur_hdl := dbms_sql.open_cursor;
     
       -- parse cursor
       dbms_sql.parse(cur_hdl, sql_stmt,
          dbms_sql.V7);
     
       -- supply binds
       dbms_sql.bind_variable
          (cur_hdl, ':code_ur', ur_code);
     
        -- execute cursor
        rows_processed := 
        dbms_sql.execute(cur_hdl);
        dbms_output.PUT_LINE('NBRE LIGNE DBMS : ' || rows_processed);
     
     
        -- close cursor
        dbms_sql.close_cursor(cur_hdl);
     
    end indicateur_test;

  6. #6
    Membre Expert Avatar de Garuda
    Homme Profil pro
    Chef de projet / Urbaniste SI
    Inscrit en
    Juin 2007
    Messages
    1 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet / Urbaniste SI
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 285
    Par défaut
    Que font tes requêtes ? Des SELECT ? des UPDATE ? des INSERT ?

    tu ne fais pas de 'FETCH' !

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

Discussions similaires

  1. limiter temps d'execution requete pour protéger ma base
    Par crazykangourou dans le forum Oracle
    Réponses: 2
    Dernier message: 09/02/2007, 13h13
  2. [débutant]probleme execution requete INSERT
    Par melodie53 dans le forum JDBC
    Réponses: 2
    Dernier message: 03/08/2006, 16h45
  3. Execution requete des ouverture base
    Par Sam 069 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 27/07/2006, 08h46
  4. [MySQL] Problème exécution requête
    Par snaxisnake dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 08/05/2006, 16h00
  5. [VB.net] Probleme execution requete
    Par nico10gbb dans le forum Windows Forms
    Réponses: 2
    Dernier message: 13/04/2006, 11h13

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