Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2569 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [Oracle] Requete conditionnelle

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Oracle] Requete conditionnelle

n°444319
hop le fou
Tu m'en diras tant
Posté le 30-06-2003 à 16:49:06  profilanswer
 

encore un probleme de requete tordu avec des conditions
on recupere deux données d'un formulaire
il y en a une des deux qui est nulle
si la premiere est nulle on fait ceci :
and contrat.numcont_ct = NVL(:NC,contrat.numcont_ct)
ca ne pose pas de probleme
 
en revanche la deuxieme variable, si elle n'est pas nulle entraine la condition suivante :
tiersct.id_ti = (select id_ti
      from tiers
      where num_ti= :NS
       and cd_tt = 'AS'
      )
(c'est :NS qui peut etre a nul)
 
ca ne sert donc a rien d'utiliser NVL
g bien essayé d'utiliser decode :
and 'true' = decode(:NS,'NOT NULL','false','true') OR
 tiersct.id_ti = (select id_ti
      from tiers
      where num_ti= :NS
       and cd_tt = 'AS'
      )
 
pour ne faire la condition que si c <> de null
(MagicBuzz ==> g pas du tout comprendre a cette technique)
 
on ne pe également pas utiliser le decode normalement en testant la valeur paske le test sur :NS se trouve dans une sous requete et si on adopte la meme solution que pour la premiere partie de la requete, on se retrouve avec + d'une colonne comme résultat ce qui ne plait pas du tout a Oracle évidemment...
 
alors keskil reste comme solution ? :??:  
a l'aide...

mood
Publicité
Posté le 30-06-2003 à 16:49:06  profilanswer
 

n°444328
tomlameche
Et pourquoi pas ?
Posté le 30-06-2003 à 16:57:31  profilanswer
 

hop le fou a écrit :


 
on ne pe également pas utiliser le decode normalement en testant la valeur paske le test sur :NS se trouve dans une sous requete et si on adopte la meme solution que pour la premiere partie de la requete, on se retrouve avec + d'une colonne comme résultat ce qui ne plait pas du tout a Oracle évidemment...


Il suffit de rajouter "and rownum < 2" dans ta sous-requete


---------------
Gérez votre collection de BD en ligne ! ---- Electro-jazzy song ---- Dazie Mae - jazzy/bluesy/cabaret et plus si affinité
n°444338
hop le fou
Tu m'en diras tant
Posté le 30-06-2003 à 17:05:53  profilanswer
 

tomlameche a écrit :


Il suffit de rajouter "and rownum < 2" dans ta sous-requete


 
Oracle ne connait pas rownum...
ca a surement un autre nom...
je vais chercher...

n°444351
tomlameche
Et pourquoi pas ?
Posté le 30-06-2003 à 17:12:11  profilanswer
 

hop le fou a écrit :


 
Oracle ne connait pas rownum...


 :heink: comment ça il ne connait pas rownum ????  
Il t'as dit quoi oracle quand t'as essayé ? Quelle requete ?


---------------
Gérez votre collection de BD en ligne ! ---- Electro-jazzy song ---- Dazie Mae - jazzy/bluesy/cabaret et plus si affinité
n°444360
hop le fou
Tu m'en diras tant
Posté le 30-06-2003 à 17:19:41  profilanswer
 

tomlameche a écrit :


 :heink: comment ça il ne connait pas rownum ????  
Il t'as dit quoi oracle quand t'as essayé ? Quelle requete ?


 
il ma dit nom de colonne inconnu...
je reessaye g des pbs de test
voila la requete
 
select contrat.numcont_ct NUMCONT,
 produit.refer_pr REFPROD,
 contrat.prann_ct PRANN,
 decode(mvt.cdpos_mvt,1,'En Cours',2,'Mis en Demeure',3,'Suspendu',4,'Résilié','Autre') POSITION
from entcontrat,contrat,tiersct,produit,ssmvt,mvt
where contrat.id_ct = tiersct.id_ct
 and contrat.numali_ct = 0
 and contrat.id_ect = entcontrat.id_ect
 and contrat.cd_smv = ssmvt.cd_smv
 and ssmvt.cd_mvt = mvt.cd_mvt
 and contrat.cd_pr = produit.cd_pr
 and tiersct.cd_tt = 'SO'
 and numavt_ct = (select max(numavt_ct)
     from contrat  
     where id_ect = entcontrat.id_ect
      and dtef_ct &lt;= to_date(:DS,'DDMMYYYY')
      and dtcrec_ct &lt;= to_date(:DS,'DDMMYYYY')
     )
 and nummvt_ct = (select max(c.nummvt_ct)
     from contrat c
     where c.id_ect = entcontrat.id_ect
      and contrat.numavt_ct = c.numavt_ct
      and c.dtef_ct &lt;= to_date(:DS,'DDMMYYYY')
      and dtcrec_ct &lt;= to_date(:DS,'DDMMYYYY')
     )
 and contrat.numcont_ct = NVL(:NC,contrat.numcont_ct)
 
 and 'true' = decode(:NS,'NOT NULL','false','true')
 OR tiersct.id_ti = (select id_ti
      from tiers
      where num_ti= :NS
       and cd_tt = 'AS'
       and rownum &lt; "2"
      )

n°444368
tomlameche
Et pourquoi pas ?
Posté le 30-06-2003 à 17:23:32  profilanswer
 

Essai comme ça :  

Citation :

and ('true' = decode(:NS,'NOT NULL','false','true')
 OR tiersct.id_ti = (select id_ti
      from tiers
      where num_ti= :NS
       and cd_tt = 'AS'
       and rownum < 2
      ))



---------------
Gérez votre collection de BD en ligne ! ---- Electro-jazzy song ---- Dazie Mae - jazzy/bluesy/cabaret et plus si affinité
n°444383
hop le fou
Tu m'en diras tant
Posté le 30-06-2003 à 17:28:13  profilanswer
 

tomlameche a écrit :

Essai comme ça :  

Citation :

and ('true' = decode(:NS,'NOT NULL','false','true')
 OR tiersct.id_ti = (select id_ti
      from tiers
      where num_ti= :NS
       and cd_tt = 'AS'
       and rownum < 2
      ))


 


 
pb de serveur ici, pe pas tester dans l immediat...
mais je crois que c pour ca que ca marchait pas qd je testais le decode
c paske je ne mettais pas la parenthese sur la totalité du test
je pensais qu'elle servait à rien...
merci  :jap:  


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [Oracle] Requete conditionnelle

 

Sujets relatifs
[PHP] SUBSTR dans une requête SQL?Requete SQL : C tout con, mais ca me bloque :(
[ORACLE] comparaison de dateJRE et ORACLE
[Oracle] comment marche to_date ???Comment sauvegardez vous votre base oracle ?
Fonction équivalente au decode de Oracle?[Oracle] comparer des valeurs
[SQL] Oracle, choisir plusieurs dates différentesHELLLPPP probleme sql avec oracle (VB, adodc, odbc)
Plus de sujets relatifs à : [Oracle] Requete conditionnelle


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR