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 :

Test d'existence d'une table avant insertion


Sujet :

PL/SQL Oracle

  1. #1
    Membre à l'essai
    Inscrit en
    Octobre 2003
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 26
    Points : 20
    Points
    20
    Par défaut Test d'existence d'une table avant insertion
    Bonjour, peut être que quelcun pourra m'aider
    Je cherche à faire une insertion dans une table, mais le script doit pouvoir passer sur différentes configurations.
    Et la table n'existe pas forcément.
    J'ai donc un test sur l'existence de ma table avant de faire l'insertion.
    Mais Oracle me renvoi une exception systématiquement en disant que ma table n'existe pas malgré le test.
    Quelcun connait t'il une méthode qui fonctionne ?

    Voila le code que j'utilise :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    --Test de l'existence de la table
    select count(table_name)
    into t_exist
    from all_tables
    where upper(table_name) ='MA_TABLE';
     
    --Si la table existe, on insere
    if (t_exist <>0) then
    insert into MA_TABLE
    values ('1','test');
    end if;
    Merci d'avance

  2. #2
    Membre averti Avatar de xdescamp
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 300
    Points : 442
    Points
    442
    Par défaut
    Le code PL/SQL est compilé avant d'être exécuté. C'est à ce moment qu'Oracle se rend compte que la table n'existe pas.
    Pour que ça fonctionne même si la table n'existe pas, il faut "cacher" l'ordre SQL dans du SQL dynamique.
    Quelque chose du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    --Test de l'existence de la table
    SELECT count(table_name)
    INTO t_exist
    FROM all_tables
    WHERE upper(table_name) ='MA_TABLE';
     
    --Si la table existe, on insere
    IF (t_exist <>0) then
    EXECUTE IMMEDIATE 'INSERT INTO MA_TABLE VALUES (:b1, :b2)' USING '1', 'test' ;
    END IF;

  3. #3
    Membre à l'essai
    Inscrit en
    Octobre 2003
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 26
    Points : 20
    Points
    20
    Par défaut Merci
    Super, ça fonctionne
    Merci beaucoup

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 19/03/2012, 11h53
  2. Réponses: 5
    Dernier message: 13/06/2007, 16h23
  3. Réponses: 2
    Dernier message: 19/05/2007, 16h38
  4. test d'existence d'une table dans une bd mysql
    Par kafana dans le forum JDBC
    Réponses: 5
    Dernier message: 25/03/2006, 21h19
  5. Réponses: 1
    Dernier message: 14/11/2005, 16h51

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