|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() Inscription : juillet 2011 Messages : 3 ![]() |
Bonjour à tous,
Je débute en SQL une table INCOST avec un champ clé INCOST.PART et un champ INCOST.INPQTY à mettre à jour une table SFROUT avec un champ clé SFROUT.PART et des champs à tester Voilà la requête que j'ai pondu: Code :
Comment gérer le NULL (je voudrais : si NULL, SET INQPTY=1) J'ai essayé des CASE, des IF, des IFNULL, je m'en sort pas Help. Merci. |
||
|
|
00
|
|
|
#2 |
![]() ![]() Alain Ingénieur d'études décisionnel Inscription : mai 2002 Messages : 4 445 ![]() |
Non, ce n'est pas compliqué, il suffit de connaitre la fonction NVL...
NVL(expression, defaut) retourne defaut si expression est NULL, expression sinon.
__________________
Modérateur Langage SQL N'oubliez pas le bouton et pensez aux balises [code]Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur ![]() |
|
|
00
|
|
|
#3 | ||
|
Invité de passage
![]() Inscription : juillet 2011 Messages : 3 ![]() |
Bonjour al1_24 et merci pour votre réponse,
Malheureusement, la fonction NVL ne semble pas reconnue par mon système. J'ai épuré ma requète jusqu'à : Code :
674 : Procedure (nvl) not found. 111 : ISAM error : no record found C'est peut-être un pb de version de Informix? De plus, je craint qu'une fonction type NVL() ne fonctionne pas avec une requete (SELECT..FROM..WHERE) en tant qu'expression. Je me demande si je ne suis pas dans une impasse avec cette structure... Pas si simple en fait |
||
|
|
00
|
|
|
#4 |
![]() ![]() Alain Ingénieur d'études décisionnel Inscription : mai 2002 Messages : 4 445 ![]() |
L'expression 1/0 ne retourne pas NULL !!!
Mais une erreur de calcul
__________________
Modérateur Langage SQL N'oubliez pas le bouton et pensez aux balises [code]Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur ![]() |
|
|
00
|
|
|
#5 | ||
|
Invité de passage
![]() Inscription : juillet 2011 Messages : 3 ![]() |
Ah d'accord, dans d'autres langages proches (mySql par ex) IFNULL(1/0,10) renvoie 10, je pensais que c'était pareil mais bon, peu importe... Le code erreur indique que c'est la fonction qui n'est pas reconnue. D'ailleurs, si je fait:
Code :
Pourquoi mon Informix ne reconnait pas nvl()??? Edit : Ma version est : Informix-ESQL 7.23 TC1 |
||
|
|
00
|
|
|
#6 |
|
Nouveau Membre du Club
![]() Inscription : juillet 2010 Messages : 23 ![]() |
Bonjour,
Informix-SQL est une partie cliente. Si la version mentionnée est celle du moteur: 7.23.TC1, il y a des chances que cette fonction ne soit pas supportée. Cette version est ancienne et plus supportée depuis de très nombreuses années. Hope this help. |
|
|
00
|
|
|
#7 |
|
Membre régulier
![]() Eric VercellettoAchitecte Informix SGBD et applications Inscription : octobre 2010 Messages : 63 ![]() |
Bonjour
pour avoir la version de ton serveur, possibilités: 1) tu te logues sur le serveur comme utilisateur informix, et tu tapes onstat -p si tu obtiens quelque chose , cela veut dire que du es en Informix Dynamic Server. dans ce cas la première ligne indique ta version de serveur. si tu n'as rien, c'est : soit la variable d'environnement INFORMIXDIR, INFORMIXSERVER et PATH ne sont pas correctement valorisées, soit ton moteur est Informix SE. Si tu es en SE, NVL n'existe pas et n'existera probablement pas. IBM maintient le produit et le vend toujours, mais ne fait que du bug fixing. Et à vrai dire pas trop d'intérêt car aujourd'hui tu peux avoir Informix Dynamic Server Innovator C Edition pour zéro Euros, et tu auras un moteur autrement plus puissant et actuel. Pour info NVL et decode ont été introduits dans IDS 7.30 ( en 1998 ). Ceci dit, tu peux aussi te faire ta propre procédure stockée "my_nvl", qui aura le même effet. Un truc du style: paramètres entrants: la valeur en question, la valeur à mettre si NULL paramètre sortant: la valeur corrigée, si la valeur récupérée est null, tu renvoies une autre valeur, sinon la même. La syntaxe au niveau du sql appelant sera strictement la même. Attention par contre au nom de la procédure, car le jour où tu migreras vers une version actuelle et supportée, ce que je te conseille, tu auras un doublon sur cette fonction et il faudra la supprimer. Il serait peut-être temps de te reactualiser au niveau version. Je comprends qu'on ne change pas une équipe qui gagne en production, mais il est bon aussi d'avoir une version "moderne" où tu sois sûr qu'elle est maintenue. A ta dispo si tu veux en savoir plus Bon courage Eric |
|
00
|
Copyright © 2000-2012 - www.developpez.com