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 :

Intéret des collections et enregistrements ?


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    344
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 344
    Par défaut Intéret des collections et enregistrements ?
    Bonjour

    Je viens de lire la très bonne doc PL/SQL et sa partie sur les collections, enregistrements (http://sheikyerbouti.developpez.com/...age=Chap5#L5.5)

    Il me manque en fait un peu l'état de l'art : dans quels cas ce genre d'objet est il utile ? Est ce uniquement pour une écriture/lecture du code plus aisée ?

    Pour reprendre l'exemple des factures : admettons que j'ai une table de facture avec le n° du client et la date, et que je veuille faire un tableau du nombre de factures par client et par mois, c'est faisable avec une double boucle.

    Merci

    PS : si un modo pouvait déplacer mon message dans le sous-forum PL/SQL, ce serait plus approprié (désolé)

  2. #2
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    discussion déplacée dans le forum SQL-PL/SQL.

  3. #3
    Membre émérite Avatar de Yorglaa
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    845
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 845
    Par défaut
    Salut,
    ce n'est certainement pas le seul intérêt, mais des gros avantage est un gain de performances, notament lors de traitement de gros volumes de données...

    prenons un exemple...
    dans une procédure tu veux sélectionner tout le détail des produits commandés par un client depuis 5 ans et insérer ce détail PLUS certaines autres informations dans une table finale à des fins de statistiques.

    dans un processus "ancienne méthode" tu irais (par exemple) sélectionner les lignes de ton client, les insérer dans la table cible puis faire les updates nécéssaires sur chaque ligne pour y ajouter les infos supplémentaires voulues.

    Avec les collections, je ferais comme ceci :
    je crée une collection dont la structure de ligne est identique à la table cible.
    j'affecte à cette collection les lignes de mon client.
    puis j'ajoute à chaque ligne de cette collection les infos supplémentaires voulues.
    et au final j'insère d'un seul coup l'entier de la collection dans ma table de statistiques (avec un ForAll ... ).

    Le gain ici est que toute ta transaction (avant l'insert) se déroule dans la collection, donc en mémoire... pas de premier insert partiel, puis d'update... on laisse les disques tranquilles (à part le Select évidemment), également les redo logs.
    PUIS lorsqu'on insère la collection dans la tables, Oracle agit "presque" comme un copier-coller de la collection dans la table finale... c'est à dire qu'il déplace les blocs directement dans la table, puisque les lignes de la collection ont déjà la bonne structure... d'où une fois encore gain de vitesse ET de consommation d'IO disque et de génération de redo log...

    Voilà, c'est juste un petit exemple en passant...

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    344
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 344
    Par défaut
    D'accord, c'est bien plus parlant pour moi comme ca maintenant.

    Reste que charger des tonnes de données en mémoire puis les retravailler, faire des calculs etc tout en mémoire, faut avoir pas mal de Go de RAM et pas que plusieurs users lancent le schmilblick en meme temps ;-)

    Merci
    Loko

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    attention tout de même, il faut traiter la collection par paquet (LIMIT) sinon gare aux perfs qui seront même pire que le passage par une table temporaire qui reste quand même une solution plus performante dés lors qu'il y a un traitement ensembliste de la données. La collection est vraiment adapté aux traitements ligne à ligne d'un ensemble.

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

Discussions similaires

  1. Concaténer des lignes d'enregistrements dans une colonne
    Par dany13 dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 08/07/2005, 21h56
  2. [debutant] selection des 6 derniers enregistrements
    Par LoLoSS dans le forum Langage SQL
    Réponses: 4
    Dernier message: 09/07/2004, 15h27
  3. Intéret des clés composées ?
    Par romain3395 dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 28/06/2004, 14h19
  4. Réponses: 4
    Dernier message: 16/03/2004, 14h16
  5. Réponses: 10
    Dernier message: 01/08/2003, 13h45

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