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

DB2 Discussion :

[AS400] Combinaison requête avec row_number et upper


Sujet :

DB2

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 7
    Par défaut [AS400] Combinaison requête avec row_number et upper
    Bonjour,

    Voila c'est dernier temps je travaille sur une base db2. Je tiens à préciser que je ne suis pas expert en ce genre de sgbd, cependant dernièrement je m'en sert pour le développement d'un site en php.

    Pour les besoins du site j'effectue une requête appelée via un module de recherche accompagné d'une pagination sur une page web. Le but étant de retourner les résultats d'un recherche avec pagination des résultats s'il y a lieu d'y avoir une pagination.

    Pour cela j'effectue donc une requête qui ressemble à ce genre de modèle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT * FROM (
    SELECT rownumber() OVER (ORDER BY ID) AS ID_NEXT, NOM FROM MATABLE WHERE NOM LIKE '%Test%' OR UPPER(NOM) LIKE '%TEST%'
    ) AS TABLE WHERE ROW_NEXT BETWEEN 1 AND 15

    Sur cette exemple de requête que je vous présente, j'utilise la fonction rownumber pour simplifier les résultats retourner par la requête en fonction de la pagination sur laquelle je me trouverais sur l'ecran de mon site. Et de même, j'utilise la fonction UPPER dans le but de limiter la casse des majuscule, minuscule pour le module de recherche qui est intégré dans ma page web.

    Cependant, d'ou ce post dans ce forum, lors de l'execution de ma requête celle-ci ne parvient à s'exécuter. Si je retire la fonction upper par contre, la requête me retourne des résultats. D'ou je me dit qu'un upper coupler à un rownumber ne peuvent s'éxecuter.

    D'ou mon interrogation. Y a til possibilité de coupler un rownumber avec un upper en effectuant une tout autre requête ou existe t-il un équivalent en db2 susceptible de répondre à mon besoin ?

    Merci par avance de vos réponse.

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Par défaut
    Essaie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ... FROM MATABLE WHERE UPPER(NOM) LIKE '%TEST%')

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 7
    Par défaut
    Merci de votre réponse Mercure, mais je crois que je me suis mal fait comprendre.
    En faite l'exemple de requête que j'ai présenté n'est pas la réelle requête que je tente d'effectée mais un exemple qui y ressemble. Cependant j'ai tenter quand même de la rectifier en suivant votre réponse mais toujours le même soucis rencontrée.

    Pour infos je développe sous Zend Studio et je teste mes requêtes à travers celui-ci, via un module de requêteur proposé par ce même produit.

    Voici les codes d'erreur retourner par celui-ci lorsque j'effectue ma requête. En espérant que ça puisse vous éclairer dans le soucis que je rencontre :

    "
    AMIDB2 --> [SQL0255] Fonction incompatible avec la requête. Cause . . . . . : Le code raison est 6 : - Code 1 - Les sous-requêtes scalaires et la corrélation latérale issues d'une expression de table imbriquée ne sont pas admises avec les fichiers répartis. - Code 2 - Une erreur s'est produite lors de l'utilisation d'un fichier réparti temporaire. - Code 3 - EXCEPT ou INTERSECT non pris en charge pour cette requête. - Code 4 - La référence d'une séquence n'est pas prise en charge avec les fichiers répartis. -- Code 5 -- Une expression récursive de table commune n'est pas compatible avec cette requête. -- Code 6 -- Une fonction OLAP n'est pas compatible avec cette requête. -- Code 7 -- Une fonction ORDER OF n'est pas compatible avec cette requête. -- Code 8 -- Une instruction FULLSELECT scalaire n'est pas compatible avec cette requête. -- Code 9 -- Un fichier réparti est traité dans un travail à unités d'exécution multiples, ou bien ce n'est pas l'unité d'exécution initiale. Que faire . . . : Liste des actions correctives : - Code 1 : Modifiez la requête de sorte qu'elle n'utilise pas de sous-requêtes scalaires ou de corrélation issues d'une expression de table imbriquée. - Code 2 : Pour plus d'informations, reportez-vous aux messages précédents. - Code 3 : Enlevez EXCEPT ou INTERSECT de la requête. - Code 4 : Enlevez la référence de séquence de la requête. -- Code 5 : Enlevez l'expression récursive de table commune de la requête. -- Code 6 : Enlevez la fonction OLAP de la requête. -- Code 7 : Enlevez la fonction ORDER OF de la requête. -- Code 8 : Indiquez de nouveau la requête sans l'instruction FULLSELECT. -- Code 9 : N'utilisez pas plusieurs unités d'exécution pour exécuter la requête.
    "

    Merci d'avance pour vos réponses.

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Par défaut
    Alors, sauf erreur de ma part, je pense qu'il faut un niveau supplémentaire d'imbrication juste pour UPPER si fonction OLAP utilisée.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 7
    Par défaut
    Merci de votre réponse.

    Par contre je ne suis pas sur de très bien comprendre ce que vous me dite. pourriez vous me donner un exemple de requête ou illustrer par une requête ce que vous dites ?

    Merci d'avance.

  6. #6
    Membre expérimenté Avatar de Grulim
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 234
    Par défaut
    Bonjour,

    Ta requête ne passe pas sur mon db2, parce qu'elle contient des erreurs.
    En la triturant (j'ai dû sortir le order by du over), j'ai pu obtenir un résultat avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT * FROM (
     SELECT rownumber() OVER () AS ID_NEXT, NOM
     FROM MATABLE
     WHERE NOM LIKE '%Test%' OR UPPER(NOM) LIKE '%TEST%'
     ORDER BY ID_NEXT
    ) AS TABLE WHERE ID_NEXT BETWEEN 1 AND 15
    En espérant que cela t'aide...

Discussions similaires

  1. Requête avec plusieurs combinaison
    Par nikolas92400 dans le forum Langage SQL
    Réponses: 8
    Dernier message: 25/08/2014, 01h13
  2. [2008] Requête avec ROW_NUMBER
    Par Tofidou dans le forum Développement
    Réponses: 4
    Dernier message: 24/03/2014, 17h29
  3. problème de requête avec jointures
    Par tinhat dans le forum Requêtes
    Réponses: 7
    Dernier message: 11/08/2003, 10h33
  4. Problème dans requête avec count()
    Par BadFox dans le forum Requêtes
    Réponses: 3
    Dernier message: 08/07/2003, 18h02

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