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 :

un curseur dynamique où le nom de la table est un argument


Sujet :

SQL Oracle

  1. #1
    Candidat au Club
    Inscrit en
    Février 2008
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 2
    Points : 2
    Points
    2
    Par défaut un curseur dynamique où le nom de la table est un argument
    Bonjour,

    La réponse peut être évidente, je m'en excuse d'avance si tel est le cas. Ma question est la suivante. J'ai écrit une procédure ont le but est de purger divers tables. Les traitements de purges étant sensiblement les mêmes d'une table à une autre, je souhaite factoriser mon code. Le problème est que visiblement il n'est pas possible dans un curseur dynamique de déclarer la table comme un paramètre... Ci_dessous, la portion de code posant 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
    PROCEDURE purge_table(SITE              IN NUMBER,
                          TABLE_NAME        IN VARCHAR2,
                          TABLE_COLUMN_SITE IN VARCHAR2,
                          TABLE_COLUMN_DATE IN VARCHAR2,
                          TABLE_PARAM       IN NUMBER,
                          POSTE_PARAM       IN NUMBER,
                          P_RETOUR          OUT NUMBER) IS
     
      delai number;
      CURSOR C_TABLE(p_delai number, p_site number) IS
        SELECT t.rowid
          FROM TABLE_NAME t
         WHERE trunc(TABLE_COLUMN_DATE) < sysdate - p_delai
           AND TABLE_COLUMN_SITE = p_site;
    ...
    Avez vous une idée ?

    D'avance, merci pour votre contribution.

  2. #2
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Je ne vois pas de curseur dynamique mais toute simplement un curseur statique avec des paramètres.
    Il n’y pas de problème en cas d’utilisation d’un curseur dynamique pour modifier le nom de la table vu que la requête exécute par le curseur dynamique est formée à partir d’une chaîne de caractères. Par contre il n’est pas possible d’utiliser un paramètre pour spécifier le nom de la table.

  3. #3
    Candidat au Club
    Inscrit en
    Février 2008
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Merci pour ta réponse. ;-)

  4. #4
    Membre régulier
    Inscrit en
    Septembre 2005
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 73
    Points : 82
    Points
    82
    Par défaut
    Hello,

    Heuu je ne comprends pas bien la réponse de mnitu ?! En effet "morif 1" il y a un problème ici la proc ne sera jamais valide puisque imcompilable... et pour cause TABLE_NAME n'existe pas...
    Donc ça donne plutôt :

    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
     
    SQL> set serveroutput on
    SQL> /
     
    Procedure created.
     
    SQL> l
      1  create or replace procedure test
      2  ( table_name in varchar2 ) is
      3  sqlcur varchar2(255);
      4
      5  TYPE mon_curseur_type is ref cursor;
      6  mon_curseur            mon_curseur_type;
      7  mon_buffer             varchar2(4000);
      8
      9  BEGIN
     10  sqlcur := 'select  * from ' || table_name ;
     11  open mon_curseur for sqlcur;
     12  loop
     13  fetch mon_curseur into mon_buffer;
     14  exit when mon_curseur%NOTFOUND;
     15  dbms_output.put_line (mon_buffer);
     16  end loop;
     17* END;
    SQL> execute test ('DUAL');
    X
     
    PL/SQL procedure successfully completed.
     
    SQL>
    Voila voili...

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

Discussions similaires

  1. Le nom de la table est dans un table
    Par PierreLaurent81 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 01/06/2015, 09h25
  2. [MySQL] MySQL a répondu: Le nom de la table est vide
    Par faamugol dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 15/12/2008, 20h00
  3. [MySQL] variable dynamique:récupérer le nom, pas le contenu
    Par php_de_travers dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 18/02/2006, 09h13
  4. ODBC et curseurs dynamique!!!
    Par F@keur dans le forum MFC
    Réponses: 7
    Dernier message: 30/03/2005, 20h05
  5. Enregistrement issu d'un curseur dynamique
    Par vanessaf22 dans le forum SQL
    Réponses: 26
    Dernier message: 15/04/2004, 13h26

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