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 :

Optimiser une requete via la mention "partition"


Sujet :

SQL Oracle

  1. #1
    Futur Membre du Club
    Inscrit en
    Février 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 4
    Points : 6
    Points
    6
    Par défaut Optimiser une requete via la mention "partition"
    Bonjours,

    j'ai une table de très gros volume que je doit purger en fonction de certaine valeurs d'une colonne C_DATE.
    Cette table étant partitionnée par trimestres, et dans un soucis d'optimisation
    J'ai écris une proc PL/SQL utilisant un curseur, du type

    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
     
    ...
    Nom_Part varchar2(10);
    ...
    cursor cur is
    select Col_A, Col_B, Col_C
    from Ma_table partition(Nom_Part)
    where To_char(C_DATE,'MMRRRR') = var_mois||var_annee;
    ...
    Begin
     
    if (var_annee = '2001' and var_mois='12')
    then
          Nom_Part := "Ma_Table_P1";
    end if;
     
    for rec in cur
    loop
    ....
    Mais celà ne fonctionne pas, lors que je lance ma procedure
    Oracle me repond :"ORA-02149: Specified partition does not exist"

    Alors que la dite partition existe bien...

    y a t'il un moyen de passer un nom de partition via une variable?

    merci d'avance..

  2. #2
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    et pourquoi pas simplement filtrer sur la clé de partitionnement

    Là c'est du SQL dynamique que tu dois faire

  3. #3
    Futur Membre du Club
    Inscrit en
    Février 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 4
    Points : 6
    Points
    6
    Par défaut
    J'ai trouvé la solution à mon problème ,
    avec du sql dynamique justement...

    Mais j'ai eu quelques difficultés avant de réussir à générer mon curseur dynamiquement...

    Voilà la solution que j'ai trouvé:
    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
     
    --Declaration du curseur
    TYPE t_Cur is ref cursor;
     
    CUR  T_CUR;
     
    REC Ma_table%ROWTYPE;
    ...
    Begin
    ...
    req_cur := 'select Col_A, Col_B, Col_C from Ma_table partition (' || nom_part || ') where to_CHAR(C_DATE,''MMRRRR'') = ' || v_mois || v_annee ;
     
    OPEN CUR for req_cur;
     
    LOOP
    	FETCH CUR INTO REC;
    ...
    END LOOP
    Merci!

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 24/11/2005, 11h46
  2. Aide pour optimiser une requete
    Par Akanath dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 15/09/2005, 11h05
  3. Optimiser une Requetes SQL sous ASP
    Par NeHuS dans le forum ASP
    Réponses: 8
    Dernier message: 18/04/2005, 16h26

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