|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Invité régulier
![]() Inscription : novembre 2011 Messages : 25 ![]() |
Bonjour,
J'ai une requête SQL fonctionnel, notamment sous Toad, mais qui ne compile en PRO*C. J'ai déjà vu ce problème et il est lié apparemment à une différence de version entre les langages SQL. Maintenant, étant récemment sorti de l'école et ayant une pauvre expérience du SQL, je vous avoue que je suis perdu quand on me dit de revenir à une vieille version du langage, surtout que j'ai déjà du pas mal cherché pour obtenir cette requête fonctionnelle. Si vous pouvez m'aider, j'en serais fortement reconnaissant. Juste me dire la technique à utiliser pour transformer la requête que voici : Code :
Code :
Albin Gilles. |
||||
|
|
00
|
|
|
#2 |
![]() ![]() ![]() Cédric DuprezInscription : avril 2002 Messages : 3 823 ![]() |
Bonjour,
Quel est le message d'erreur à la compilation ? Est-ce que c'est la fonction NVL qui n'est pas reconnue ?
__________________
Rédacteur / Modérateur SGBD Mes tutoriels et la FAQ MySQL ---------------------------------------------------- Pensez aux balises code et au tag Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça
|
|
|
00
|
|
|
#3 | ||
|
Invité régulier
![]() Inscription : novembre 2011 Messages : 25 ![]() |
Merci de votre réponse,
En fait il dit que le SELECT (celui qui va chercher la valeur de seq_num) est mal placé et qu'il s'attend à une valeur de la forme, voilà l'erreur : Code :
La réponse que l'on m'a donné sur un forum Pro*C c'est que le précompilateur ne connaît pas cette façon de faire et qu'il faut modifier ma requête notamment en utilisant du sql dynamique... mais sincérement j'ai aucune idée de ce que ça peut être.. Merci beaucoup, Albin |
||
|
|
00
|
|
|
#4 |
![]() ![]() ![]() Cédric DuprezInscription : avril 2002 Messages : 3 823 ![]() |
NVL, c'est du Oracle ça, non ?
Et en essayant de remplacer cette fonction par la fonction COALESCE (qui fait la même chose, mais qui est plus standard) ?
__________________
Rédacteur / Modérateur SGBD Mes tutoriels et la FAQ MySQL ---------------------------------------------------- Pensez aux balises code et au tag Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça
|
|
|
00
|
|
|
#5 |
|
Invité régulier
![]() Inscription : novembre 2011 Messages : 25 ![]() |
Bonjour,
J'ai résolu mon problème de compilation mais maintenant j'ai un problème de résultat (la requête ne me retourne pas exactement ce que je veux). Pour faire simple, la requête doit copier le contenu de rating_score dans rating_score_his mais en ajoutant un numéro de séquence (seq_num) qui dépend de deux champs : person_idn et rating_model. C'est à dire que pour chaque record dans rating_score, il faut trouver le max(seq_num) dans rating_score_his pour les record ayant les même person_idn et rating_model. C'est une sorte de compteur de record ayant les même person_idn et rating_model. Mais il y'a un problème, parce qu'il met (par exemple) 106 au seq_num de tous les records ayant les même person_idn et rating_model que j'ajoute dans rating_score_his au lieu de 106, 107, 108,... La clé primaine de rating_score est person_idn, rating_model et model_var ce qui signifie qu'il est possible d'inserer plusieurs record ayant les meme person_idn et rating_model mais qu'il faut que le seq_num soit mis à jour à chaque insert. Est-ce qu'il est possible de faire ça en SQL pur? J'ai un collègue qui m'a dit que c'était parce qu'il n'y avait pas de commit après chaque insert et donc quand il faisait le select max (blabla) il ne prenait pas en compte les lignes insérées. Est-il possible de demander de commit à chaque insert ou est-ce que je prends le problème d'une mauvaise façon? Si le fait de commit à chaque insert dépend du SGBD j'irai demander dans le forum oracle. Merci beaucoup pour votre aide et votre temps, Albin. |
|
|
00
|
|
|
#6 | ||
|
Membre Expert
![]() Pacman PacmanBusiness analyst Inscription : juin 2004 Messages : 1 417 ![]() |
Salut !
Au lieu d'ajouter 1 au max dans le sous-select, ajoute ROWNUM à l'extérieur du SELECT, genre : Code :
__________________
(c'est ma photo) Paku, Paku ! Pour les jeunes incultes : non, je ne suis pas un pokémon... Le pacblog : http://pacmann.over-blog.com/ |
||
|
00
|
|
|
#7 |
|
Invité régulier
![]() Inscription : novembre 2011 Messages : 25 ![]() |
Très bonne idée malheureusement le ROWNUM n'est pas propre a person_idn/rating_model et donc les dernier lignes recoive + 890.000... mais sinon il itére bien 890.001, 890.002, 890.003, ...
Peut-être en calculant le ROWNUM en faisant une sorte de group by person_idn/rating_model ? Mais j'avoue que je sais pas trop comment mettre ça en place.. Merci beaucoup, Albin. |
|
|
00
|
|
|
#8 | ||
|
Membre Expert
![]() Pacman PacmanBusiness analyst Inscription : juin 2004 Messages : 1 417 ![]() |
En fait, le mieux, c'est d'utiliser les fonctions analytiques.
Un truc du genre Code :
__________________
(c'est ma photo) Paku, Paku ! Pour les jeunes incultes : non, je ne suis pas un pokémon... Le pacblog : http://pacmann.over-blog.com/ |
||
|
00
|
|
|
#9 |
|
Invité régulier
![]() Inscription : novembre 2011 Messages : 25 ![]() |
C'est parfait !
Un grand merci je ne connaissais pas du tout ce genre de technique... Bon week-end ! Albin |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com