Précédent   Forum des professionnels en informatique > Bases de données > DB2
DB2 Forum d'entraide technique sur la base de données DB2. Voir aussi -> Rubrique DB2
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 25/03/2011, 10h55   #1
Rédacteur/Modérateur
 
Avatar de JauB
 
Homme Faisel
Ingénieur COBOL/AS400
Inscription : octobre 2005
Messages : 1 713
Détails du profil
Informations personnelles :
Nom : Homme Faisel
Âge : 31
Localisation : Maroc

Informations professionnelles :
Activité : Ingénieur COBOL/AS400
Secteur : Finance

Informations forums :
Inscription : octobre 2005
Messages : 1 713
Points : 2 712
Points : 2 712
Envoyer un message via AIM à JauB Envoyer un message via MSN à JauB Envoyer un message via Yahoo à JauB
Par défaut un SELECT avec NULL forcé dans le résultat !

Bonjour,
Mon but est d'avoir un SELECT du genre :

Code :
1
2
SELECT champ1, champ2, NULL AS champ3
FROM    MABIB.MYFILE
Mais DB2/AS400 n'accepte cette syntaxe avec le NULL!

Code :
SQL0206 - La colonne NULL ne se trouve pas dans les TABLES indiquées
Je ne veux pas avoir un NULL sous format chaîne de caractères mais plutôt un vrai type NULL. En effet, une application Java doit exécuter cette requête et tester sur le type de retour de cette requête, si c'est NULL le champ en question (ici champ3) ne sera pas traité ....

Une piste ?
__________________
*** Ingénieur COBOL/AS400 ***

-------------------------------------------------------------------

Mes articles, Mon Blog

Rubrique Jasper/iReport :
------- Forum Jasper --------
----- FAQ Jasper/iReport -----

JauB est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/03/2011, 11h04   #2
Membre actif
 
Inscription : juin 2008
Messages : 146
Détails du profil
Informations personnelles :
Âge : 44

Informations forums :
Inscription : juin 2008
Messages : 146
Points : 183
Points : 183
Sous Zos, on ne peut pas non plus sélectionner directement la valeur NULL, par contre tu peux contourner le souci en écrivant par exemple :

Code :
1
2
3
SELECT
CASE WHEN 1 = 2 THEN '1' ELSE NULL END AS CHAMP3
...
1 n'étant jamais égal à 2, DB2 renvoie NULL.
pdz74 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/03/2011, 11h17   #3
Rédacteur/Modérateur
 
Avatar de JauB
 
Homme Faisel
Ingénieur COBOL/AS400
Inscription : octobre 2005
Messages : 1 713
Détails du profil
Informations personnelles :
Nom : Homme Faisel
Âge : 31
Localisation : Maroc

Informations professionnelles :
Activité : Ingénieur COBOL/AS400
Secteur : Finance

Informations forums :
Inscription : octobre 2005
Messages : 1 713
Points : 2 712
Points : 2 712
Envoyer un message via AIM à JauB Envoyer un message via MSN à JauB Envoyer un message via Yahoo à JauB
Cool comme solution
Merci.
Je mets
Citation:
Envoyé par pdz74 Voir le message
Sous Zos, on ne peut pas non plus sélectionner directement la valeur NULL, par contre tu peux contourner le souci en écrivant par exemple :

Code :
1
2
3
SELECT
CASE WHEN 1 = 2 THEN '1' ELSE NULL END AS CHAMP3
...
1 n'étant jamais égal à 2, DB2 renvoie NULL.
__________________
*** Ingénieur COBOL/AS400 ***

-------------------------------------------------------------------

Mes articles, Mon Blog

Rubrique Jasper/iReport :
------- Forum Jasper --------
----- FAQ Jasper/iReport -----

JauB est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/03/2011, 12h19   #4
Membre Expert
 
Inscription : novembre 2004
Messages : 1 298
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 1 298
Points : 1 355
Points : 1 355
C'est en effet un stratagème astucieux

Perso, j'aurais plutot écrit :
Code :
1
2
 
UPDATE MABIB.MYFILE SET CHAMP3 = NULL
Mercure est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/03/2011, 12h29   #5
Membre Expert
 
Patrick
Inscription : mai 2008
Messages : 821
Détails du profil
Informations personnelles :
Nom : Patrick
Âge : 42
Localisation : France, Hérault (Languedoc Roussillon)

Informations forums :
Inscription : mai 2008
Messages : 821
Points : 1 041
Points : 1 041
Exact, NULL n'est pas possible en tant que constante.
En ce qui concerne le CASE, on peut le réduire à :
Code :
CASE WHEN 1 = 2 THEN 0 END
Sinon, le mieux est d'utiliser NULLIF.
Si les deux arguments passés à la fonction sont égaux, alors NULL est retourné. Ca nous donne donc :

Code :
SELECT ...., NULLIF(0, 0)
K2R400 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/03/2011, 13h17   #6
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 638
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 638
Points : 2 630
Points : 2 630
bonjour,

ce type de syntaxe ne marche-t-elle pas ?

Code sql :
1
2
 
CAST(NULL AS CHAR(1)) AS champ3

ou prenez n'importe quel type.

C'est que j'utilise sous system i
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/03/2011, 14h53   #7
Membre actif
 
Inscription : juin 2008
Messages : 146
Détails du profil
Informations personnelles :
Âge : 44

Informations forums :
Inscription : juin 2008
Messages : 146
Points : 183
Points : 183
Je confirme que CAST(NULL AS CHAR(1)) fonctionne.

Comme quoi, ça en fait des moyens un peu loufoques de forcer NULL, ce serait tellement plus simple si on pouvait sélectionner directement NULL... Mais quand il s'agit de faire simple, IBM n'est pas toujours présent !
pdz74 est déconnecté   Envoyer un message privé Réponse avec citation 01
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h11.


 
 
 
 
Partenaires

Hébergement Web