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

Administration Oracle Discussion :

Global Temporary Table


Sujet :

Administration Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Février 2003
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2003
    Messages : 44
    Par défaut Global Temporary Table
    Bonjour,

    Apres avoir crée une Global Temporary Table
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    create global temporary table think.tempo
    ( 
      REFERENCE	  VARCHAR2 (64Byte),
      ROLE		  VARCHAR2 (64Byte),
      LOGIN		  VARCHAR2 (64Byte),
      REPONSE	  INTEGER,
      DATEVAL	  Date,
      TRANSACTION VARCHAR2 (64Byte)
      )
      on commit preserve rows;
    j'execute une requete, laquelle insere des données dans cette table temporaire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    insert into think.tempo (REFERENCE,ROLE,TRANSACTION) 
     
    SELECT distinct tmm_reventity.revname as REFERENCE, vtmm_authorization.relchild as ROLE,
           vtmm_authorization.relparent as TRANSACTION
      FROM think.vtmm_authorization,
           think.tmm_reventity,
           think.tmm_revlink,
           think.tmm_relation
     WHERE ((tmm_revlink.tmm_id1 = tmm_reventity.tmm_id) AND (tmm_relation.relparent = vtmm_authorization.relparent)
            AND (tmm_relation.relchild = tmm_reventity.revstate))
    AND (tmm_reventity.revname in (select tmm_reventity.revname from think.tmm_reventity where revname like '%M25F%'))
    AND NOT vtmm_authorization.relchild like 'SysAdm'
    order by 1,3
    Un message me dit bien que les lignes sont crées.
    j'execute ensuite un Commit, mais quand je regarde le contenu de la table Tempo, celle-ci est vide.
    Si j'essaie de faire un drop de la table, je recois le message suivant:
    ORA-14452: tentative de creation, modification ou suppression d'un index sur une table temporaire deja en cours d'utilisation

    DROP TABLE THINK.TEMPO CASCADE CONSTRAINTS PURGE
    Lors de cette suppression je ne vois pas de quel index il s'agit ?

    Comment faire pour inserer des données dans une Table Temporaire ?

    Merci d'avance.
    Pierre Diaz

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Par défaut
    Les données d'une table temporaire sont privées à la session qui les a créés: La session A ne peut pas lire les données créées par la session B même si la session A peut voir la structure de la table qui a été créée par la session B.

    Avant de supprimer une table temporaire, il faut la vider avec TRUNCATE TABLE et il faut être sûr que toutes les sessions ayant inséré des données ont exécuté TRUNCATE TABLE sinon la table temporaire ne peut pas être supprimée (elle sera supprimée si on arrête l'instance qui provoque le vidage des tablespaces temporaires).

    PS:Merci de préciser votre version d'Oracle.

  3. #3
    Membre Expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Par défaut
    Es-tu sûr que ta requête te ramène des lignes ? Es-tu dans la même session oracle quand tu interroges ta table ?
    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
    SQL>create global temporary table tempo (a varchar2(30)) on commit preserve rows;
    Table créée.
     
    SQL>insert into tempo select table_name from user_tables;
    547 ligne(s) créée(s).
     
    SQL>commit;
    Validation effectuée.
     
    SQL>select * from tempo;
    A
    ------------------------------
    TABLE_1
    TABLE_2
    TABLE_3
    TABLE_4
    4 ligne(s) sélectionnée(s).
    Si je fais un drop dans ma session :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SQL>drop table tempo;
    drop table tempo
               *
    ERREUR à la ligne 1 :
    ORA-14452: tentative de création, modification ou suppression d'un index sur une table temporaire déjà en cours d'utilisation
    Par contre une fois sorti de ma session (donc ma table vide) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SQL>drop table tempo;
    Table supprimée.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 20/08/2014, 14h32
  2. Réponses: 19
    Dernier message: 05/01/2014, 09h48
  3. Utilisation de global temporary tables
    Par LEK dans le forum SQL
    Réponses: 21
    Dernier message: 17/09/2012, 15h53
  4. global temporary table en cache ?
    Par 13thFloor dans le forum Administration
    Réponses: 3
    Dernier message: 04/03/2008, 19h34
  5. Drop of global temporary table
    Par dev_ora_moimeme dans le forum Oracle
    Réponses: 8
    Dernier message: 07/07/2006, 17h22

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