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 :

PARTITION(nom_partition) not existe!


Sujet :

SQL Oracle

  1. #1
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    67
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mai 2008
    Messages : 67
    Par défaut PARTITION(nom_partition) not existe!
    PARTITION(nom_partition) not existe!


    bonjour
    j'ai un big probleme qui me bloque

    SELECT * FROM ma_table
    partition (pname)

    pname est de type varchar2(30)
    je donne à pname un nom mais j comme erreur partition not existe
    meme si le nom que j 'ai affecté existe

    SELECT * FROM ma_table
    partition (P12)
    cette requete marche bien mais l'autre non

    SELECT * FROM ma_table
    partition ('P12')

    cette derniere requette ne marche pas c'est ce que oracle fait (je pense) il remplace pname par 'P12'
    qui n'ai pas acceptable comme parametre dans PARTITION

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Je ne suis pas sûr d'avoir bien compris votre problème.
    Commencez par vérifier le nom de vos partitions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select * from sys.dba_tab_partitions
    where table_name = 'MaTable'

  3. #3
    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,
    le nom de la partition ne peut pas être un paramètre, c'est comme le nom d'une table.
    En général, on n'a pas à préciser le nom de la partition, c'est oracle qui voit quelle aprtition correpond aux données. Quel est le but de celà ?
    Cordialement,
    Franck.

  4. #4
    Membre Expert Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Par défaut
    Salut !

    Comme dit Franck, si tu as le critère de partitionnement, il est effectivement préférable de mettre ce critère dans le WHERE et ne pas préciser la partition.

    Sinon, pour le problème de passage de variable, il faut exécuter dynamiquent la requête :
    Tu construit la chaîne SELECT *.... avec le nom de la partition, puis tu EXECUTE IMMEDIATE

  5. #5
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

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

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    bien sûr ça dépend de la version et de la méthode de partitionement

    Très exotique et pas pour les âmes sensibles, la fonction DATAOBJ_TO_PARTITION qui permets d'utiliser une variable pour désigner la partition

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    create table lsc_t(x number) partition by system (partition p1); 
    select object_id from user_objects where object_name='LSC_T' and sub_object_name='P1';
     OBJECT_ID
    ----------
       4615047
    insert into lsc_t partition(DATAOBJ_TO_PARTITION(lsc_t,4615047)) values (1);
    select * from lsc_t partition(DATAOBJ_TO_PARTITION(lsc_t,4615047)) ;
       X
    ----
       1
    Bon, beaucoup plus intéressant est la clause FOR apparue en 11g

    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
    create table lsc_t(x) partition by range (x) 
    (partition p1 values less than (10), 
     partition p2 values less than (20), 
     partition p3 values less than (maxvalue))
    as select rownum from user_objects;
    select * from lsc_t partition for (15);
       X
    ----
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    A noter aussi en 11G de l'apparition de l'interval partitioning, j'ai poussé un peu pour l'utiliser et je suis très content au final

    Avec un tout petit process (dans mon ETL) pour renommer les partitions lorsqu'elles ont le nom défini par le système.

  7. #7
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    67
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mai 2008
    Messages : 67
    Par défaut
    Merci bouceaup pour vos reponses

    j'ai trouvé que sql dynamique a resolu le probleme ,effectivement le nom d'une partition ne doit pas passer en paramaitre

    Au lieu de déclarer un curseur statique
    j'ai déclaré un curseur référenciel
    l_partition est une table contenant une liste de partition retourné par une fonction, je dois lire partition par partition à partir de cette table
    Puis faire passer le nom de la partition dans le curseur ,


    TYPE t_cur is ref cursor ;
    cursor_ref t_cur;
    .......

    FOR i IN 1..l_partition.COUNT
    LOOP

    BEGIN
    l_nom_partition:=l_partition(i);

    OPEN cursor_ref for 'SELECT *
    FROM shema.ma_table
    partition ('||l_nom_partition||')';
    LOOP
    .........

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

Discussions similaires

  1. PARTITION(nom_partition) not existe!
    Par ibtissamr dans le forum PL/SQL
    Réponses: 2
    Dernier message: 13/02/2009, 17h34
  2. PROBLEME AVEC LES REQUETES IS NULL / NOT EXISTS
    Par sylvaine dans le forum Langage SQL
    Réponses: 5
    Dernier message: 04/06/2004, 13h26
  3. [DB2] create table... if not exists ?
    Par iubito dans le forum DB2
    Réponses: 6
    Dernier message: 23/03/2004, 18h26
  4. Requète avec NOT EXISTS
    Par missllyss dans le forum SQL
    Réponses: 2
    Dernier message: 23/09/2003, 15h20
  5. [JCreator] "package tools does not exists"
    Par snyper147 dans le forum Environnement de Développement Intégré (EDI)
    Réponses: 2
    Dernier message: 04/05/2003, 20h08

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