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

Oracle Discussion :

obtenir la liste des partitions d'une table


Sujet :

Oracle

  1. #1
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    483
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Avril 2007
    Messages : 483
    Points : 234
    Points
    234
    Par défaut obtenir la liste des partitions d'une table
    Bonjour,

    J'ai créé une table partitionnée, mais je ne trouve nul part comment obtenir la liste de ces partitions ?

    Par ailleur, y a-t-il un moyen de tester si une partition existe ou pas ? (en pl/sql par exemple)

    Je travaille sous 10 et 11g

    Merci d'avance (je continue bien sur à chercher de mon côté

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Essayez ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select *
      from dba_tab_partitions
     where table_owner = <schema>
       and table_name = <nom_table>

  3. #3
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    483
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Avril 2007
    Messages : 483
    Points : 234
    Points
    234
    Par défaut
    J'ai remplacé dba_tab_partition par user_tab_partition (car c'est le user lui même qui va lancer le script) et c'est bon (je cherchais bien une table de ce style je n'étais pas loin en essayant user_partitions !)

    J'ai maintenant essayé de tester si une partition existe comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    DECLARE
    	nameof_partition TEXT := 'STATS_' || to_char(SYSDATE-(366*2), 'yyyymm');
    BEGIN
    	IF nameof_partition IN (SELECT partition_name FROM user_tab_partitions WHERE table_name='MA_TABLE') THEN
    		ALTER TABLE MA_TABLE DROP PARTITION nameof_partition;
    	END IF;
    END;
    /
    Mais j'ai reçu en retour :
    error at line 5:
    ORA-06550: line 5, column 3:
    PLS-00103: Encountererd the symbol "ALTER" when expecting one of the following:
    ( begin case declare exit for goto if loop mod null pragma
    rase return select update while with <an identifier>
    <a double-quoted delimited-identifier> <a bind variable> <<
    continue close current delete fetch lock insert open rollback
    savepoint set sql execute commit forall merge pipe purge
    Mais je ne vois pas ce qui cloche (enfin si j'ai compris que c'était le alter mais je ne vois pas pourquoi)

    Merci d'avance

  4. #4
    Membre confirmé

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    507
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 507
    Points : 503
    Points
    503
    Par défaut
    Bonjour.
    Essayez de mettre l'ALTER TABLE dans un EXECUTE IMMEDIATE.

  5. #5
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    483
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Avril 2007
    Messages : 483
    Points : 234
    Points
    234
    Par défaut
    J'ai donc essayé en modifiant comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    DECLARE
    	nameof_partition VARCHAR(200) := 'STATS_' || to_char(SYSDATE-(366*2), 'yyyymm');
    	alter_request VARCHAR(200);
    	select_request VARCHAR(200);
    BEGIN
    	SELECT partition_name INTO select_request FROM user_tab_partitions WHERE table_name='MA_TABLE';
    	IF nameof_partition IN (select_request) THEN
    		alter_request := 'ALTER TABLE MA_TABLE DROP PARTITION ' || nameof_partition || ';';
    		EXECUTE IMMEDIATE alter_request;
    	END IF;
    END;
    /
    mais maintenant c'est
    DECLARE
    *
    ERROR at line 1:
    ORA-01422: exact fetch returns more than requested number of rows
    ORA-06512: at line 6
    kézako ? c'est qu'il n'aime pas le fait que la requête retourne plusieurs résultats ? j'ai essayé en mettant un where pour qu'il n'y ai qu'une seule valeur de retournée et c'est un "no data found" qui arrive à la place ...

  6. #6
    Membre confirmé

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    507
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 507
    Points : 503
    Points
    503
    Par défaut
    Vous pouviez laisser la boucle telle qu'écrite précédemment:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            IF nameof_partition IN (SELECT partition_name FROM user_tab_partitions WHERE table_name='MA_TABLE') THEN
    		alter_request := 'ALTER TABLE MA_TABLE DROP PARTITION ' || nameof_partition || ';';
    		EXECUTE IMMEDIATE alter_request;
     
    	END IF;
    Effectivement cette erreur indique que la requête retourne plus de lignes que votre variable ne peut en contenir.

  7. #7
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    483
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Avril 2007
    Messages : 483
    Points : 234
    Points
    234
    Par défaut
    Citation Envoyé par GoLDoZ Voir le message
    Vous pouviez laisser la boucle telle qu'écrite précédemment:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            IF nameof_partition IN (SELECT partition_name FROM user_tab_partitions WHERE table_name='MA_TABLE') THEN
    		alter_request := 'ALTER TABLE MA_TABLE DROP PARTITION ' || nameof_partition || ';';
    		EXECUTE IMMEDIATE alter_request;
     
    	END IF;
    Effectivement cette erreur indique que la requête retourne plus de lignes que votre variable ne peut en contenir.
    J'ai donc remis comme ça, mais j'avoue que je ne vois vraiment pas pourquoi il ne veut pas de la sous-requête... Avez-vous une idée ?

Discussions similaires

  1. comment obtenir la liste des champs d'une table
    Par richard038 dans le forum SQL
    Réponses: 4
    Dernier message: 13/02/2009, 18h28
  2. Obtenir la liste des doublons dans une table SAS
    Par marie mouse dans le forum SAS Base
    Réponses: 2
    Dernier message: 05/12/2007, 15h33
  3. Récupérer la liste des champs d'une table
    Par mister3957 dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 17/04/2007, 14h56
  4. Liste des contraintes d'une table
    Par lalyly dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 02/08/2006, 11h23
  5. Comment obtenir la liste des paramètres d'une SP ?
    Par Le Gritche dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 14/03/2003, 16h54

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