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 :

GTT et PS (Globale Temporary Table et Stored Procedure))


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 34
    Par défaut GTT et PS (Globale Temporary Table et Stored Procedure))
    Bonjour,

    J'ai créé une GTT avec l'option "On Commit preserve rows".
    Je remplis cette GTT par une SP et cette GTT remplit sa fonction en gardant en mémoire les data le temps de la SP.

    Mais une fois sortie de la SP, cette GTT est vide, malgré le fait que ma session n'est pas achevée et malgré l'option "On Commit preserve rows".

    Peut-on garder cette GTT avec ses lignes une fois sortie de la SP ?
    (Sinon je crée une table normale...)

  2. #2
    Membre émérite Avatar de jkofr
    Homme Profil pro
    Senior Consultant DBA (Trivadis SA)
    Inscrit en
    Octobre 2006
    Messages
    484
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : Suisse

    Informations professionnelles :
    Activité : Senior Consultant DBA (Trivadis SA)
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 484
    Par défaut
    Hello

    Comment execute-tu ta SP? Avec quel client?

    Currieux quand mê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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
     
    CREATE GLOBAL TEMPORARY TABLE tst 
    (
     OWNER                                              VARCHAR2(30),
     OBJECT_NAME                                        VARCHAR2(128),
     SUBOBJECT_NAME                                     VARCHAR2(30),
     OBJECT_ID                                          NUMBER,
     DATA_OBJECT_ID                                     NUMBER,
     OBJECT_TYPE                                        VARCHAR2(19),
     CREATED                                            DATE,
     LAST_DDL_TIME                                      DATE,
     TIMESTAMP                                          VARCHAR2(19),
     STATUS                                             VARCHAR2(7),
     TEMPORARY                                          VARCHAR2(1),
     GENERATED                                          VARCHAR2(1),
     SECONDARY                                          VARCHAR2(1),
     NAMESPACE                                          NUMBER,
     EDITION_NAME                                       VARCHAR2(30)
    ) ON COMMIT PRESERVE ROWS;
     
    create or replace procedure testload as
    begin
     
    insert into tst select * from dba_objects;
    commit;
    end;
    /
     
     
    Select count (*) from tst;
     
    SQL> select count (*) from tst;
     
      COUNT(*)
    ----------
             0
     
    SQL> exec testload;
     
    PL/SQL procedure successfully completed.
     
    SQL> select count (*) from tst;
     
     
      COUNT(*)
    ----------
         75214

    Jko

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 34
    Par défaut
    Je travaille sous SQL Developer.
    J'ai créer ma GTT ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    CREATE GLOBAL TEMPORARY TABLE "xxxx"."PG_TEMP_TOTO" 
       (	"ID_ST" NUMBER(3,0)
       ) ON COMMIT PRESERVE ROWS ;
    Voici ma SP
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    CREATE OR REPLACE PROCEDURE PG_PS_TOTO AS 
    BEGIN
      execute immediate 'truncate table "LTEC"."PG_TEMP_TOTO"';
      insert into "LTEC"."PG_TEMP_TOTO"  VALUES (13);
      COMMIT;
    END PG_PS_TOTO;
    J'ai l'impression que deux GTT existent sous le même nom, hors et dans la SP !

  4. #4
    Membre Expert

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2012
    Messages
    612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2012
    Messages : 612
    Par défaut
    Bonjour,

    Pourquoi ce ""xxxx"."PG_TEMP_TOTO"" ? Les "xxxx" correspondent bien à "LTEC" ?

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 34
    Par défaut
    oui

  6. #6
    Membre émérite Avatar de jkofr
    Homme Profil pro
    Senior Consultant DBA (Trivadis SA)
    Inscrit en
    Octobre 2006
    Messages
    484
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : Suisse

    Informations professionnelles :
    Activité : Senior Consultant DBA (Trivadis SA)
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 484
    Par défaut
    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
     
    SQL> CREATE GLOBAL TEMPORARY TABLE PG_TEMP_TOTO
       (    ID_ST NUMBER(3,0)
       ) ON COMMIT PRESERVE ROWS ;
      2    3  
    Table created.
     
    SQL> CREATE OR REPLACE PROCEDURE PG_PS_TOTO AS 
    BEGIN
      execute immediate 'truncate table PG_TEMP_TOTO';
      INSERT INTO PG_TEMP_TOTO VALUES (13);
      COMMIT;
    END PG_PS_TOTO;
    /
      2    3    4    5    6    7  
    Procedure created.
     
    SQL> exec PG_PS_TOTO;
     
    PL/SQL procedure successfully completed.
     
    SQL> select count (*) from PG_TEMP_TOTO;
     
      COUNT(*)
    ----------
             1
     
    SQL>
    Cela fonctionne en 11.2.0.3 x64 sous linux.

    Vous êtes en quelle version?

    jko

  7. #7
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 34
    Par défaut
    SQL Developer est en version 4.0.0.13 et Oracle en 11.

    Je résume (un peu vite car je n'ai pas les connaissances pour vérifier ce que je dis) : sous SQL Developer j'ai deux tables temporaires qui ont le même nom l'un est directement visible et l'autre n'existe que sous SP.
    Si je remplis la GTT sous une requête normale j'ai un contenu. Sous SP : un autre !
    D'un autre côté je n'ai créé la table qu'une fois et elle est globale.

  8. #8
    Membre émérite Avatar de jkofr
    Homme Profil pro
    Senior Consultant DBA (Trivadis SA)
    Inscrit en
    Octobre 2006
    Messages
    484
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : Suisse

    Informations professionnelles :
    Activité : Senior Consultant DBA (Trivadis SA)
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 484
    Par défaut
    La SP est sous quel utilisateur?

    Un autre ou LTEC?

    Ps: il est impossible d'avoir deux tables avec le même nom.

    Jko

  9. #9
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 34
    Par défaut
    LTEC.

    J'ai l'impression que SQL Developer crée plusieurs sessions. D'ailleurs chaque SP m'indique (par exemple) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Connexion à la base de données ltec.
    Hello!
    Bye!
    Processus fermé.
    Déconnexion de la base de données ltec.


    Que ce passerait-il si deux utilisateurs sous le noms de LTEC travaille en même temps sur une GTT ?

    SQL Developer peut-il créer plusieurs sessions ?

    (J'ouvre un autre thread, car j'ai l'impression que les Materialized views sont une solution de contournement pour ce que je dois faire.)

  10. #10
    Expert confirmé
    Avatar de pachot
    Homme Profil pro
    Developer Advocate YugabyteDB
    Inscrit en
    Novembre 2007
    Messages
    1 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : Developer Advocate YugabyteDB
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 822
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    Il faudrait donner des infos plus précises.
    Une procédure stockée ne peut pas se connecter ou se deconnecter. Elle ne peut s'exécuter que dans une session déjà établie.
    Cordialement,
    Franck.

  11. #11
    Membre émérite Avatar de jkofr
    Homme Profil pro
    Senior Consultant DBA (Trivadis SA)
    Inscrit en
    Octobre 2006
    Messages
    484
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : Suisse

    Informations professionnelles :
    Activité : Senior Consultant DBA (Trivadis SA)
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 484
    Par défaut
    Vouis,
    Tout cela me semble confus!
    Jko

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 20/08/2014, 14h32
  2. Utilisation de global temporary tables
    Par LEK dans le forum SQL
    Réponses: 21
    Dernier message: 17/09/2012, 15h53
  3. global temporary table en cache ?
    Par 13thFloor dans le forum Administration
    Réponses: 3
    Dernier message: 04/03/2008, 19h34
  4. Global Temporary Table
    Par pdiaz dans le forum Administration
    Réponses: 2
    Dernier message: 21/03/2007, 12h08
  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