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 :

Tester l'existence d'une table temporaire


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de Sieldev
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    259
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 259
    Par défaut Tester l'existence d'une table temporaire
    Salut,

    Je souhaiterai creer une table temporaire dans une base Oracle 10g, cependant la complitation du code me génére 2 erreurs. J'aimerai savoir si j'utilise la bonne syntaxe.
    Dans un premier temps je teste si la table temporaire existe:
    Si non, je creer la table temporaire
    Si oui, j'efface les lignes de la table temporaire
    Mais j'ai cette erreur:
    ORA-00955: name is already used by an existing object

    Puis ensuite j'execute une procédure stockée.

    Voila le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    ...
     
    IF (select * from user_tables where TABLE_NAME = 'LISTE' and TEMPORARY = 1 ) IS NULL THEN
       create global temporary table Liste (l_date date) on commit delete rows;
    ELSE
    	delete from Liste;
    END IF;
     
    BEGIN
    	 execute ListeDate (date1, date2);
    END;
     
    ...
    J'utilise Toad.

    Cordialement,

  2. #2
    Membre éclairé
    Avatar de Sieldev
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    259
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 259
    Par défaut
    Dans le select de la condition j'ai remplacé par ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select object_id from user_objects where OBJECT_NAME = 'LISTE' and user_objects.TEMPORARY = 1
    Mais toujours la même erreur

  3. #3
    Expert confirmé 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
    Par défaut
    A part dans le cadre d’un script d’installation de l’application, c’est une mauvaise pratique de créer des tables temporaires ou pas ainsi que des autres entités à l’exécution de l’application.

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Par défaut
    Si tu veux vraiment faire ce genre de choses, utilise des requetes dynamiques (execute immediate ...).

  5. #5
    Membre éclairé
    Avatar de Sieldev
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    259
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 259
    Par défaut
    Lorsque j'éxécute le code ci-dessous, j'ai une erreur de ce type:
    ORA-06550: line 13, column 4:
    PLS-00103: Encountered the symbol "CREATE" when expecting one of the following:

    Apparement c'est une erreur de syntaxe, mais je ne vois pas pourquoi il me rejette le CREATE, à moins que se soit le condition IF THEN qu'il y avant qui ne lui plait pas. Si quelqu'un peut m'éclairer.

    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
    DECLARE
    date1 date;
    date2 date;
    id_temp number(10);
     
    BEGIN
    date1 := to_date('2009-01-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS');
    date2 := to_date('2009-12-31 23:59:59', 'YYYY-MM-DD HH24:MI:SS');
     
    SELECT object_id into id_temp FROM user_objects WHERE OBJECT_NAME = 'LISTE' AND user_objects.TEMPORARY = 'Y';
     
    IF id_temp > 0 THEN 
       CREATE GLOBAL TEMPORARY TABLE LISTE (l_date date);
    ELSE
    	DELETE FROM LISTE;
    END IF;
     
     
    ListeDate (date1, date2);
     
    END;
    Le code avant et aprés le IF marche.

  6. #6
    Membre éclairé
    Avatar de Sieldev
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    259
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 259
    Par défaut
    J'ai essayé pas mal de chose mais ça ne fonctionne pas. j'en déduis que mettre un CREATE GLOBAL TEMPORARY TABLE dans une condition IF THEN n'est pas possible sur Oracle.

    Donc comme l'a dis mnitu je créerai ma table temporaire dans un script d'application. Puis je vide ma table temporaire à chaque exécution à l'aide d'un TRUNCATE:
    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
    date1 date;
    date2 date;
    AfficherTousLesJours boolean;
     
    BEGIN
    date1 := to_date('2009-01-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS');
    date2 := to_date('2009-12-31 23:59:59', 'YYYY-MM-DD HH24:MI:SS');
    AfficherTousLesJours := true;
     
    EXECUTE IMMEDIATE 'TRUNCATE TABLE LISTE';
     
    ListeDate (date1, date2);
     
    ...
    Un DELETE FROM maTempTable devrait aussi fonctionner.

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

Discussions similaires

  1. Tester l'existence d'une table avec une requête
    Par Oluha dans le forum Access
    Réponses: 6
    Dernier message: 29/08/2005, 09h45
  2. Tester l'existence d'une table sous Access
    Par Oluha dans le forum Bases de données
    Réponses: 10
    Dernier message: 29/08/2005, 09h42
  3. tester l existance d une table
    Par mick84m dans le forum Requêtes
    Réponses: 4
    Dernier message: 25/04/2005, 11h24
  4. [JDBC]Tester l'existence d une table
    Par juflata dans le forum JDBC
    Réponses: 7
    Dernier message: 29/06/2004, 15h27
  5. [ADO] Tester l'existence d'une table
    Par nd25 dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 05/09/2002, 13h55

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