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

Sybase Discussion :

[ASE] ROWNUM dans Sybase ?


Sujet :

Sybase

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Avril 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 3
    Points : 1
    Points
    1
    Par défaut [ASE] ROWNUM dans Sybase ?
    Bonjour,

    je cherche à transposer la requête ORACLE suivante pour SYBASE :
    select toto, rownum
    from bdd


    qqun pourrait-il m'aider ?

    Liliem

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 307
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 307
    Points : 1 828
    Points
    1 828
    Par défaut
    ROWNUM n'existe pas dans Sybase (et n'a évidemment pas de vrai sens dans une base relationnelle - mais ça c'est une autre discussion :-)

    La solution consiste à splitter la requête en deux:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    select ROWNUM=identity(10), <autres colonnes> 
    into #tmp
    from ....
    where ...
     
    select ROWNUM, ...
    from #tmp
    Cependant il faut bien se rendre compte qu'il n'y a aucune relation physique entre le ROWNUM qui est généré et les données dans la table d'origine, et donc que la valeur du ROWNUM ne peut pas être utilisée dans une quelconque clause WHERE...

    Michael
    Michael Peppler
    Membre de TeamSybase - www.teamsybase.com

    "A successful [software] tool is one that was used to do something undreamed of by its author." -- S. C. Johnson

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Avril 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par mpeppler
    (...)
    Cependant il faut bien se rendre compte qu'il n'y a aucune relation physique entre le ROWNUM qui est généré et les données dans la table d'origine, et donc que la valeur du ROWNUM ne peut pas être utilisée dans une quelconque clause WHERE...

    Michael
    Merci Michael pour ta réponse,
    le soucis c'est que je voudrai justement utiliser les "rownum" dans une clause where :
    je m'explique,
    je cherche à pointer sur la nième ligne en-dessous d'un résultat, sans utiliser de procédure stockée.

    1 | Lundi 02/01
    2 | Mardi 03/01
    3 | Mercredi 04/01
    4 | Jeudi 05/01
    5 | Vendredi 06/01
    6 | Lundi 09/01
    7 | ...

    par ex : si j'ai Lundi 02/01 --> + 5 = Lundi 09/01

    avec oracle et rownum, cela aurait été possible, mais là... je suis feintée !

    merci encore pour ta réponse et je continue mes recherches sur la toile..

    Mais si qqun a une solution, cela m'aiderait beaucoup !!!

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 307
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 307
    Points : 1 828
    Points
    1 828
    Par défaut
    Il y a évidemment une solution intermédiaire:

    D'abord, préparer une table temporaire qui contient la PK de la vraie table et un pseudo-rownum:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select rownum=identity(10), pk_de_la_table_source into #tmp
    from table_source
    where conditions...
    order by ...
    Maintenant, on utilise la table #tmp pour gérer les reqètes suivantes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    select t.rownum, autres_colonnes
    from #tmp, table_source s
    where t.pk_de_la_table_source = s.pk_de_la_table_source
    and autres conditions...
    order by t.rownum
    et pour trouver la ligne rownum+x:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select t.rownum, autres_colonnes
    from #tmp, table_source s
    where t.pk_de_la_table_source = s.pk_de_la_table_source
    and t.rownum = $valeur
    Tant que la session reste ouverte la table #tmp reste disponible. Evidemment il reste passablement de problèmes potentiels, mais peut-être que cela peut te mettre dans la bonne direction.

    Michael
    Michael Peppler
    Membre de TeamSybase - www.teamsybase.com

    "A successful [software] tool is one that was used to do something undreamed of by its author." -- S. C. Johnson

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Avril 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 3
    Points : 1
    Points
    1
    Par défaut [ASE] ROWNUM dans Sybase ?
    Merci beaucoup pour ton aide Michael,

    Liliem

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

Discussions similaires

  1. [ASE]Connection php / sybase
    Par m@estro dans le forum Sybase
    Réponses: 1
    Dernier message: 30/06/2006, 13h22
  2. [ASE][TSQL]utilisation de decode() dans Sybase
    Par madina dans le forum Sybase
    Réponses: 3
    Dernier message: 21/06/2006, 17h38
  3. [ASE]comment télécharger Sybase ASE ?
    Par guiguigs dans le forum Sybase
    Réponses: 3
    Dernier message: 12/06/2006, 18h32
  4. [ASE][11]Driver Sybase System 11 tronque des valeurs
    Par pinpin44 dans le forum Sybase
    Réponses: 3
    Dernier message: 14/10/2005, 15h21
  5. Update dans SYBASE avec jointure sur 2 colonnes
    Par metheorn dans le forum Sybase
    Réponses: 2
    Dernier message: 24/06/2005, 16h51

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