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

PL/SQL Oracle Discussion :

Select par groupe d'enregistrement


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Août 2006
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 31
    Par défaut Select par groupe d'enregistrement
    Bonjour,

    Je voulais savoir s'il était possible de remonter des enregistrements par groupes.
    C'est a dire, faire par exemple un "select" sur une table qui me remonterait d'abord les 1000 premiers enregistrements puis les 10000 suivant etc ...
    De la même façon est il possible de "delete" les enregistrements d'une table par block de 1000 (ou autre) ? Ceci afin de pouvoir "Commit" régulièrement.

    Tout ceci dans le cadre d'un programme en PL SQL.
    Il faut savoir que les requêtes select, insert et delete sont générées automatiquement à partir d'une table (la table des tables à traiter) et que je ne peux donc pas (si j'ai bien tout saisie) utiliser le "FORALL"

    Merci

    P.S. j'ai cherché dans le forum et je n'ai rien trouvé...

  2. #2
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Citation Envoyé par Scrouik Voir le message
    Bonjour,

    Je voulais savoir s'il était possible de remonter des enregistrements par groupes.
    C'est a dire, faire par exemple un "select" sur une table qui me remonterait d'abord les 1000 premiers enregistrements puis les 10000 suivant etc ...
    ...
    Ca c'est des requêtes de pagination (voir les FAQ sur ce site).
    Citation Envoyé par Scrouik Voir le message
    ...
    De la même façon est il possible de "delete" les enregistrements d'une table par block de 1000 (ou autre) ? Ceci afin de pouvoir "Commit" régulièrement.
    ...
    C'est possible mais en général c'est eronné de le faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    delete ...
    Where Rownum <= 1000
    Citation Envoyé par Scrouik Voir le message
    ...
    Tout ceci dans le cadre d'un programme en PL SQL.
    Il faut savoir que les requêtes select, insert et delete sont générées automatiquement à partir d'une table (la table des tables à traiter) et que je ne peux donc pas (si j'ai bien tout saisie) utiliser le "FORALL"

    Merci

    P.S. j'ai cherché dans le forum et je n'ai rien trouvé...

  3. #3
    Membre averti
    Inscrit en
    Août 2006
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 31
    Par défaut
    J'ai trouvé la FAQ et j'ai fais une requête du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM (SELECT ROWNUM AS r, T.* FROM MA_TABLE T) WHERE r BETWEEN X AND Y
    Mais celle-ci ne fonctionne malheureusement plus avec un insert car maintenant je récupère un nouveau champs "r".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    INSERT INTO LA_TABLE(
         SELECT * FROM (SELECT ROWNUM AS r, T.* FROM MA_TABLE T) 
    WHERE r BETWEEN X AND Y)
    Sachant que la structure de "la_table' est la même que "ma_table"

    Je ne suis pas loin ... je vais trouver.

  4. #4
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Petit astuce, examine le SELECT *
    (et essaie d'utiliser les balises [code] [/code])

  5. #5
    Membre averti
    Inscrit en
    Août 2006
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 31
    Par défaut
    Citation Envoyé par mnitu Voir le message
    Petit astuce, examine le SELECT *
    (et essaie d'utiliser les balises [code] [/code])
    Ca rend le code beaucoup moins lisible quand il ne s'agit de ne mettre qu'une phrase et de plus ça ne répond pas vraiment à ma question :s pour ne pas dire que
    je trooooooouuuuve pas

  6. #6
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Citation Envoyé par Scrouik Voir le message
    Ca rend le code beaucoup moins lisible quand il ne s'agit de ne mettre qu'une phrase et de plus ça ne répond pas vraiment à ma question :s pour ne pas dire que
    je trooooooouuuuve pas
    Astuce
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SQL> insert into temp
      2       SELECT empno, ename, job, mgr, hiredate, sal, comm, deptno
      3         FROM (SELECT ROWNUM AS r, T.* FROM EMP T)
      4                               WHERE r BETWEEN 1 AND 3
      5  ;
     
    3 rows inserted
     
    SQL>
    Mais franchement je ne pense pas que ce code qui a l'air de fonctionner comme disait quelque un récemment est correct. De tout façon moi je ne l’emploierai pas.

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 10/09/2011, 12h08
  2. [AC-2007] Numérotation d'enregistrements par groupe
    Par jekwalla dans le forum VBA Access
    Réponses: 1
    Dernier message: 15/03/2010, 10h55
  3. Requête extraire n enregistrements par groupe lente
    Par MARCO63 dans le forum Requêtes et SQL.
    Réponses: 51
    Dernier message: 04/03/2008, 18h24
  4. Limiter le nombre d'enregistrements par groupe
    Par atoff dans le forum Access
    Réponses: 2
    Dernier message: 10/01/2007, 09h26
  5. dernier enregistrement par group by
    Par startout dans le forum Langage SQL
    Réponses: 8
    Dernier message: 03/07/2006, 16h05

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