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 :

Curseur et test de table


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 4
    Par défaut Curseur et test de table
    Bonjour,

    Je souhaite utiliser un curseur comme dans mon exemple ci-dessous :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
                
    begin
            dbms_output.put_line('blablablablabla');
                    
            for rec in (select col1, col2 from table1)
            loop
                  if rec.col1 blablablabla
                   else blablablabla;
            end loop;
    end;
    Sauf que ma table table1 n'est pas forcément présente dans mon schéma. Du coup, est-il possible de catcher cette erreur si elle se présente ?
    (peut-être qu'il est possible de me contenter d'une requête SQL, mais là je voudrais bien me cantonner à l'utilisation d'un curseur si possib').

    J'ai essayé de tester en amont la présence de ma table et de sortir si elle n'est pas présente mais j'ai quand même un gros message d'erreur sur cette table qui n'existe pas. Pb de compilation plus que d'exécution ?

    Merci pour vos lumières...

  2. #2
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Regarde du côté des exceptions
    http://sheikyerbouti.developpez.com/...age=Chap1#L1.3

    Mais si le code est compilé (fonction en base,etc..) et que la table n'existe pas, c'est sur que ça ne marchera jamais.

  3. #3
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 2
    Par défaut
    Essayez un curseur dynamique:

    Code sql : 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
    33
    declare
     
      type type_ref_cursor is ref cursor;
      cur type_ref_cursor;
      lc$col1 "type de col1";
      lc$col2 "type de col2";
      lc$existe integer;
     
    declare
     
      type type_ref_cursor is ref cursor;
      cur       type_ref_cursor;
      lc$col1   "type de col1";
      lc$col2   "type de col2";
      lc$existe integer;
     
    begin
     
      select count(*)
        into lc$existe
        from user_tables
       where table_name = 'TABLE1';
      if (lc$existe = 1) then
        open cur for 'select * from table1';
        loop
          fetch cur
            into lc$col1, lc$col2;
          dbms_output.put_line(lc$col1 || '   ' || lc$col2);
          exit when cur%notfound;
        end loop;
      end if;
     
    end;

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 4
    Par défaut
    Merci pour vos réponses.

    Juste après mon post, j'ai un peu (beaucoup) cherché effectivement du côté des curseurs dynamiques. J'ai commencé par lorgner du côté de DBMS_SQL (trop long à mettre en place pour ce que j'avais à faire), puis du côté de EXECUTE IMMEDIATE. Au final, cela ressemble à cela :

    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
     
    declare
    TYPE TYP_COL_SP IS TABLE OF SUPPORTS_PREP.su_code_barre%type ;
    TabColSP TYP_COL_SP ;                             
    Requete     VARCHAR2(200) ;
    toto           NUMBER;
     
    begin
    toto=42;
     
    Requete:= 'select blabla from blabla where blabla='||toto;
    EXECUTE IMMEDIATE Requete BULK COLLECT INTO TabColSP ;
     
    For i IN TabColSP.first..TabColSP .last Loop                       
        blablabla
    End loop ;
    end;
    Après, niveau perf' ou autre, je ne sais pas ce qui est le mieux.
    Encore merci d'avoir pris quelques instants pour me répondre.

Discussions similaires

  1. Utiliser un curseur pour Comparer deux tables
    Par bhany83 dans le forum PL/SQL
    Réponses: 4
    Dernier message: 15/01/2012, 19h16
  2. test independance table de contingence
    Par john014 dans le forum R
    Réponses: 1
    Dernier message: 17/01/2011, 10h54
  3. pl/sql curseur update entre deux tables
    Par Fiona08 dans le forum PL/SQL
    Réponses: 7
    Dernier message: 27/11/2010, 01h14
  4. Curseur et noms de tables en argument
    Par bliml dans le forum PL/SQL
    Réponses: 2
    Dernier message: 21/09/2008, 15h50
  5. test existance table ou champ
    Par harjer dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 26/04/2007, 11h37

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