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

Oracle Discussion :

Quelle(s) est/sont l'utilité de ROWID ???


Sujet :

Oracle

  1. #1
    Membre averti Avatar de snoopy69
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    737
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 737
    Points : 395
    Points
    395
    Par défaut Quelle(s) est/sont l'utilité de ROWID ???
    Bonjour ...

    J'utilise Oracle 9.i et j'ai Windows Xp Pro SP2 comme machine.

    J'aimerais savoir à quoi cela sert un RowId ... J'ai trouvé une syntaye sur Internet qui correspond à ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select rowid from TB_nom_de_la_table;
    J'ai essayé de lancer la commande que j'ai eu ceci comme réultat :

    ROWID
    ---------------------------
    AAAHaJAAJAAAAAPAAA
    AAAHaJAAJAAAAAPAAB
    AAAHaJAAJAAAAAPAAC
    Je sais que c'est l'emplacement physique de la ligne de donées mais je ne comprends pas à quoi cela sert de savoir cela ... Je ne comprends pas pourquoi une adrese physique est si importante.

    Pouvez-vous m'éclaircir sur le sujet ??? Je vous remercie déjà pour les réponses que j'aurait et à tout bientôt ...

  2. #2
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Points : 3 798
    Points
    3 798
    Par défaut Re: Quelle(s) est/sont l'utilité de ROWID ???
    Citation Envoyé par snoopy69
    Je sais que c'est l'emplacement physique de la ligne de donées mais je ne comprends pas à quoi cela sert de savoir cela ... Je ne comprends pas pourquoi une adrese physique est si importante.
    Un rowid est une adresse physique, il a le même interêt qu'une adresse, à savoir, comment fais tu pour aller chez quelqu'un si tu ne connait pas son adresse ?

  3. #3
    Membre régulier
    Inscrit en
    Novembre 2003
    Messages
    125
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Novembre 2003
    Messages : 125
    Points : 102
    Points
    102
    Par défaut
    C'est également le moyen le plus rapide d'accéder à une ligne.

  4. #4
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Points : 3 798
    Points
    3 798
    Par défaut
    Citation Envoyé par heffer69
    C'est également le moyen le plus rapide d'accéder à une ligne.
    Ne serait ce pas le seul ?

  5. #5
    Membre émérite Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Points : 2 370
    Points
    2 370
    Par défaut
    Le rowid ne sert à rien. il ne sert qu'à Oracle pour manipuler ses lignes. Tu ne dois pas le connaître, pas le manipuler, pas le considérer SAUF dans de très rares requêtes d'administration (par exemple supprimer des doublons).

    Surtout ne te base jamais sur le rowid pour ton fonctionnel, préfère lui tes propres clés uniques.

  6. #6
    Membre régulier
    Inscrit en
    Novembre 2003
    Messages
    125
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Novembre 2003
    Messages : 125
    Points : 102
    Points
    102
    Par défaut
    Citation Envoyé par Jaouad
    Citation Envoyé par heffer69
    C'est également le moyen le plus rapide d'accéder à une ligne.
    Ne serait ce pas le seul ?
    Ce que je voulais dire c'est qu'une requête sur un rowid est plus rapide à exécuter qu'une requête sur une clé primaire par exemple.

  7. #7
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 460
    Points : 8 077
    Points
    8 077
    Par défaut
    Citation Envoyé par nuke_y
    Surtout ne te base jamais sur le rowid pour ton fonctionnel, préfère lui tes propres clés uniques.
    Et il est utile de préciser pourquoi :
    Le ROWID est réutilisé dès qu'il devient libre, puisqu'il s'agit juste d'une adresse, d'un numéro de tiroir.

    Donc si on supprime des lignes, leurs ROWID seront utilisés par de nouvelles lignes insérées.
    Si on fait un import, les ROWID de départ et d'arrivée n'auront rien à voir.
    Si on change une table de tablespace, les ROWID seront totalement différents.
    etc, etc

  8. #8
    Membre expert
    Avatar de bouyao
    Inscrit en
    Janvier 2005
    Messages
    1 778
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 778
    Points : 3 033
    Points
    3 033
    Par défaut
    Je te conseille de n'utiliser pas ROWID car ca peut donner des resultats non attendus.
    par exemple le temps que vous faite un select par rowid un autre modifie ce rowid.
    De même vous pouvez avoir des verrous.ORA-00054
    En plus en 8i le rowid change de valeur (IOT et les PARTITIONS)

  9. #9
    Membre expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Points : 3 199
    Points
    3 199
    Par défaut
    Vous l'aurez compris, le ROWID est un identifiant interne à Oracle et son utilisation explicite est, vous l'aurez compris, fortement déconseillée et à prendre avec des pincettes.

    On peut noter cependant que son utilisation peut parfois être nécessaire avec des applications tierces qui considère qu'une requête est read-only tant que le ROWID n'est pas sélectionné (par exemple les produits de http://www.allroundautomations.com/)

  10. #10
    Membre averti Avatar de snoopy69
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    737
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 737
    Points : 395
    Points
    395
    Par défaut
    Merci pour toutes ces réponses ...

    Je ne vais pas encore mettre RESOLU car je pense que c'est une question ouverte qui mérite encore un peu de temps de réflexion ...

    Donc lundi je vais mettre ce sujet sur RESOLU, d'ici là, n'hésitez pas à répondre. Et merci pour votre aide ...


  11. #11
    Membre expert
    Avatar de bouyao
    Inscrit en
    Janvier 2005
    Messages
    1 778
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 778
    Points : 3 033
    Points
    3 033

  12. #12
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Points : 3 798
    Points
    3 798
    Par défaut
    Citation Envoyé par heffer69
    Citation Envoyé par Jaouad
    Citation Envoyé par heffer69
    C'est également le moyen le plus rapide d'accéder à une ligne.
    Ne serait ce pas le seul ?
    Ce que je voulais dire c'est qu'une requête sur un rowid est plus rapide à exécuter qu'une requête sur une clé primaire par exemple.
    Ce n'est pas du tout la même chose !!!! Oracle traduit ta clé primaire en ROWID.

  13. #13
    Membre régulier
    Inscrit en
    Novembre 2003
    Messages
    125
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Novembre 2003
    Messages : 125
    Points : 102
    Points
    102
    Par défaut
    Est-ce que pour compter le nombre de lignes d'une table, il n'est pas préférable d'utiliser COUNT(rowid)?

  14. #14
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Points : 3 798
    Points
    3 798
    Par défaut
    Citation Envoyé par heffer69
    Est-ce que pour compter le nombre de lignes d'une table, il n'est pas préférable d'utiliser COUNT(rowid)?
    pourquoi ?

  15. #15
    Membre émérite Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Points : 2 370
    Points
    2 370
    Par défaut
    Parce qu'oracle traduit count(Ma_Cle_Primaire) en count(ROWID) ? Je ne suis pas sûr qu'on y gagne, ej ne suis pas sûr que ce soit ça qu'il se passe et je suis sûr qu'il ne faut pas utiliser les ROWID.

  16. #16
    Membre régulier
    Inscrit en
    Novembre 2003
    Messages
    125
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Novembre 2003
    Messages : 125
    Points : 102
    Points
    102
    Par défaut A
    Citation Envoyé par nuke_y
    Parce qu'oracle traduit count(Ma_Cle_Primaire) en count(ROWID) ? Je ne suis pas sûr qu'on y gagne, ej ne suis pas sûr que ce soit ça qu'il se passe et je suis sûr qu'il ne faut pas utiliser les ROWID.
    Pourquoi on y gagnerait pas?
    Je suis d'accord qu'il faut éviter les rowid mais dans ce cas précis de comptage de lignes, pourquoi ne pas l'utiliser?

  17. #17
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Points : 3 798
    Points
    3 798
    Par défaut
    Il n'y a pas de différence dans ce cas là précis. Un essai avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    set autot trace exp stat 
    set timing on
    vous le confirmera , d'autant plus qu'Oracle recommande de ne pas faire un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select count (*) from matable where
    Mais plutot sur une colonne indéxè :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select count (col) from matable where
    ou même de compter les 0 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select count (0) from matable where
    Cependant , ne jamais travailler avec la pseudo colonne ROWID

  18. #18
    Membre averti Avatar de snoopy69
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    737
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 737
    Points : 395
    Points
    395
    Par défaut
    Je remercie tout le monde pour l'aide que vous m'avez apporter dans ce post.

    A tout bientôt ...

  19. #19
    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
    pour le COUNT(ROWID), je vous rappelle que l'index est choisi en fonction des restrictions de la clause WHERE et non de ce qu'on sélectionne... ROWID, NULL ou patate n'a donc aucune importance

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 31/08/2009, 11h39
  2. [CLOB/BLOB] Quelles sont leurs utilités ?
    Par maximus001ma dans le forum DB2
    Réponses: 8
    Dernier message: 01/02/2006, 15h30
  3. Quelles mises à jours sont installés sur mon Windows 2000 ?
    Par beegees dans le forum Windows Serveur
    Réponses: 2
    Dernier message: 21/12/2005, 11h33
  4. [VB.NET][Datagrid] quelle cellule est AFFICHEE
    Par Golzinne dans le forum Windows Forms
    Réponses: 4
    Dernier message: 16/12/2005, 18h24
  5. [power AMC] Quels est vraiment son utilité?
    Par alpachico dans le forum Décisions SGBD
    Réponses: 8
    Dernier message: 08/08/2005, 08h24

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