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 :

Temporary Table in a Procédure


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 11
    Par défaut Temporary Table in a Procédure
    Bonjour à tous,

    Voilà j'ai créé une procédure,
    dans cette procédure, j'utilise des tables temporaires.
    ..................
    Mais voila j'ai une erreur indiquée dans la ligne de la création de la temp table...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Compilation errors for PACKAGE BODY GAMSCH.PKG_TMP_LOAD
     
    Error: PLS-00103: Symbole "CREATE" rencontré à la place d'un des symboles suivants :
     
              begin case declare exit for goto if loop mod null pragma
              raise return select update while with <an identifier>
              <a double-quoted delimited-identifier> <a bind variable> <<
              close current delete fetch lock insert open rollback
              savepoint set sql execute commit forall merge
              <a single-quoted SQL string> pipe
    Line: 460
    Text: create global temporary table TMP_DOCSTAR


    j'ai essayé d'utiliser execute immediate en mettant le create entre cotes... ça passe, mais le prob et que j'ai des autre erreur; table inconnue lorsque je fais insert juste après...

    dans l'attente de vote aide....

    merci

  2. #2
    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 quoi ça serte de créer la table dans le package ? Tous les objets doivent être créé avant les procédures.

  3. #3
    Membre expérimenté Avatar de DAB.cz
    Inscrit en
    Octobre 2006
    Messages
    221
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 221
    Par défaut
    Tu utilises DDL dans PL/SQL.

    c'est mauvais (PLS-00103):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    begin
      create table c (x number);
    end;
    /
    par SQL dynamique c'est bon:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    begin
      execute immediate 'create table c (x number)';
    end;
    /

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Août 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 270
    Par défaut
    Si tu utilise une table temporaire de structure fixe (qui ne change de nombre et de type de colonnes pas à chaque execution de ta procédure), il vaut mieux la créer une fois pour toute dans ton schéma.

    Une table est temporaire par son contenu, qui n'existe que le temps d'une session ou d'une transaction pour un utilisateur seulement, mais pas en tant que structure.

  5. #5
    Membre extrêmement actif
    Avatar de randriano
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 221
    Par défaut
    Citation Envoyé par jmguiche Voir le message
    Une table est temporaire par son contenu, qui n'existe que le temps d'une session ou d'une transaction pour un utilisateur seulement, mais pas en tant que structure.
    Je suis curieux, comment c'est cette table TEMPORAIRE svp?
    randriano.dvp.com
    Développeur. Product Owner [Agile]. Sites web, mobile apps, système d'information (SI).

  6. #6
    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

  7. #7
    Membre expérimenté
    Profil pro
    Inscrit en
    Août 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 270
    Par défaut
    Citation Envoyé par randriano Voir le message
    Je suis curieux, comment c'est cette table TEMPORAIRE svp?
    C'est son contenu qui est temporaire et son contenu a une visibilité restreinte à la transaction/session en cours.
    Il peut y avoir de nombreux utilisateurs qui utilisent la même table temporaire avec des contenus différents.




    Citation Envoyé par La doc il faut la lire


    GLOBAL TEMPORARY

    Specify GLOBAL TEMPORARY to indicate that the table is temporary and that its definition is visible to all sessions with appropriate privileges. The data in a temporary table is visible only to the session that inserts the data into the table.

    When you first create a temporary table, its table metadata is stored in the data dictionary, but no space is allocated for table data. Space is allocated for the table segment at the time of the first DML operation on the table. The temporary table definition persists in the same way as the definitions of regular tables, but the table segment and any data the table contains are either session-specific or transaction-specific data. You specify whether the table segment and data are session- or transaction-specific with the ON COMMIT keywords.

    You can perform DDL operations (such as ALTER TABLE, DROP TABLE, CREATE INDEX) on a temporary table only when no session is bound to it. A session becomes bound to a temporary table by performing an INSERT operation on the table. A session becomes unbound to the temporary table by issuing a TRUNCATE statement or at session termination, or, for a transaction-specific temporary table, by issuing a COMMIT or ROLLBACK statement.

    See Also:

    Oracle Database Concepts for information on temporary tables and "Temporary Table Example"
    Restrictions on Temporary Tables
    Temporary tables are subject to the following restrictions:

    Temporary tables cannot be partitioned, clustered, or index organized.

    You cannot specify any foreign key constraints on temporary tables.

    Temporary tables cannot contain columns of nested table.

    You cannot specify the following clauses of the LOB_storage_clause: TABLESPACE, storage_clause, or logging_clause.

    Parallel UPDATE, DELETE and MERGE are not supported for temporary tables.

    You cannot specify the nested_table_col_properties or parallel_clause.

    The only part of the segment_attributes_clause you can specify for a temporary table is TABLESPACE.

    Distributed transactions are not supported for temporary tables

Discussions similaires

  1. passage d'un nom de table dans une procédure stockée
    Par thierry V dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 26/07/2010, 16h48
  2. VIEW ou TEMPORARY TABLE ?
    Par Burps dans le forum Requêtes
    Réponses: 3
    Dernier message: 29/07/2005, 15h26
  3. Réponses: 3
    Dernier message: 23/03/2005, 11h28
  4. Problème d'alter table dans une procédure stockée
    Par Oluha dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 16/03/2005, 09h19
  5. create temporary table
    Par ghostlord79 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 24/02/2004, 16h57

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