Bonjour à tous,

J'ai un problème sur lequel j'aimerai votre avis.

Je travaille sur une table qui possède environ 3 millions d'enregistrements. Rien de méchant dans les données : des dates, varchar2, number...

Mon traitement PL/SQL pour l'instant charge dans un cursor l'intégralité de la table suivant la requête typée comme suit :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
SELECT champ1, champ2, champ3 
FROM matable 
WHERE champs1 BETWEEN date1 AND date2
AND champ2 <> 'valeur text'
ORDER BY champ1
Ce code fonctionne parfaitement je n'ai aucune erreur.
Mon champ2 possède uniquement la contrainte unique, et ma restriction porte toujours sur la même valeur.

Aussi me suis je dit, je vais créer une partition sur ma table afin de directement taper dedans, et ne plus utiliser mon
Code : Sélectionner tout - Visualiser dans une fenêtre à part
AND champ2 <> 'valeur text'
Aussi ai-je transformé la requête ainsi :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
SELECT champ1, champ2, champ3 
FROM matable PARTITION (mapartition)
WHERE champs1 BETWEEN date1 AND date2
ORDER BY champ1
Et là vient mon problème il me sort l'erreur durant l'exécution:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
ERROR at line 1:
ORA-04030: out of process memory
when trying to allocate 16408 bytes (koh-kghu sessi,pmuccst: adt/record)
Pourquoi me prend t il plus de mémoire alors qu'il n'a plus, enfin je crois, le parcours de la table à effectuer ....?