|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() Administrateur de base de données Inscription : avril 2011 Messages : 6 ![]() |
Bonjour,
Je voudrait solliciter votre avis sur une erreur que j'ai concernant l’exécution d'une requête: ORA-00904 T3.NIV identificateur non valide le point intriguant est que la même requête s’exécute normalement sur un serveur Windows 2003 et pas sur un serveur Redhat 5, sachant que la version déployée d'Oracle est la même. Code :
|
||
|
|
00
|
|
|
#2 |
|
Membre chevronné
![]() O. JolySupport Inscription : décembre 2010 Messages : 287 ![]() |
La message dit que la colonne niv n'existe pas dans la table ou vu t3; Pouvez-vous vérifier ?
|
|
00
|
|
|
#3 |
|
Invité de passage
![]() Administrateur de base de données Inscription : avril 2011 Messages : 6 ![]() |
Il existe bien évidement, les deux bases sont des copies identiques, l'une est une base de développement sur laquelle la requête a été écrite, et la deuxième c'est la base de production sur laquelle la requête ne s’exécute pas, et je n'arrive pas a comprendre pour quelle raison, on croirai qu'il ne s'agit pas du même interpréteur.
|
|
|
00
|
|
|
#4 |
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 311 ![]() |
|
|
|
10
|
|
|
#5 |
|
Invité de passage
![]() Administrateur de base de données Inscription : avril 2011 Messages : 6 ![]() |
Ok merci, je vais plutôt le faire en PLSQL c'est plus simple.
|
|
|
00
|
|
|
#6 | ||
|
Membre Expert
![]() Inscription : août 2008 Messages : 1 271 ![]() |
En pl/sql c'est une mauvaise idée, il faut écrire la requête autrement, par exemple je propose ça mais qui n'est peut être pas tout à fait bon :
Code :
|
||
|
|
10
|
|
|
#7 |
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 311 ![]() |
|
|
|
10
|
|
|
#8 |
|
Invité de passage
![]() Administrateur de base de données Inscription : avril 2011 Messages : 6 ![]() |
Merci, je vais m'inspirer de ta requête qui m'a l'air bien skuatamad.
Pourquoi pas le PLS? |
|
|
00
|
|
|
#9 |
|
Membre Expert
![]() Inscription : août 2008 Messages : 1 271 ![]() |
Parce que tu vas boucler sur T3 pour interroger T1, donc il y aura une requête exécutée sur T1 pour chaque t3.nation='001'.
Tout dépend du nombre de lignes vérifiant t3.nation='001' aujourd'hui et dans l'avenir mais généralement faire une requête dans une boucle en PL/SQL est contre performant et rapidement intunable. Donc il ne faut l'utiliser que dans les cas où on ne peut pas faire autrement et clairement ton besoin s'écrit en 1 seule requête SQL sans problème. Mais pour une analyse moins théorique et plus adaptée au cas présent, il nous faudrait le nombre de lignes de T3, de T1 et le nombre de lignes quand t3.nation='001'. |
|
|
10
|
|
|
#10 |
|
Invité de passage
![]() Administrateur de base de données Inscription : avril 2011 Messages : 6 ![]() |
Je ne comptai pas exécuter n fois la requête, je pensai plutôt tout simplement à faire un select (sans rownum) puis traiter les résultat pour déterminer la nationalité en fonction des données associée dans T2
|
|
|
00
|
|
|
#11 |
|
Membre Expert
![]() Inscription : août 2008 Messages : 1 271 ![]() |
Ah ok, mais il faudra filtrer en PL/SQL puisque la jointure entre T3 et T1 ramènera trop de lignes, je ne pense pas que ce soit vraiment mieux que faire une jointure dans le code.
Ma proposition à base de row_number n'est pas adaptable à ton besoin ? |
|
|
00
|
|
|
#12 |
|
Invité de passage
![]() Administrateur de base de données Inscription : avril 2011 Messages : 6 ![]() |
Si si, je demandais juste pour comprendre pourquoi c’était pas bien le PLS, sinon ben j'ai utilisé ta requête que j'ai un peu modifié ça a l'air de marcher niquel, merci encore.
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com