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 08/06/2007, 10h30   #1
Membre régulier
 
Inscription : avril 2006
Messages : 118
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 118
Points : 72
Points : 72
Par défaut insert de date null

Bonjour,

Je veux insérer des données dans un de mes fichiers en omettant de renseigner certains champs, notament une date.

J'utilise en rpg une instruction sql directe (exec sql...end-exec). Je fais donc un insert classique en listant mais zones:
Code :
1
2
3
 
INSERT INTO maTable (monIde, DateCreation, Montant, personne)
VALUES (:monIde, :DateCreation, :Montant, :personne)
J'ai une zone dateAnnulation qui devrait donc etre à null (puisque non renseignée) mais elle se met automatique à la date du jour.

Cette zone est définie comme suit dans mon DDS:
Code :
1
2
3
dateAnnulation         L                                      
                          COLHDG('Date' 'annulation')  
                          DATFMT(*EUR)
J'essaie de lui passer null en valeur, ça plante.
Quelqu'un pourrait me dire comment faire pour ne pas toucher à cette zone?

Merci d'avance
_Jnie_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/06/2007, 10h38   #2
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
Ajoute le mot clé ALWNULL sur la DDS de ta zone date ensuite repasse ton INSERT :


Code :
1
2
3
DTANNUL         L         ALWNULL
                          COLHDG('Date' 'annulation')  
                          DATFMT(*EUR)
Mercure est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/06/2007, 10h57   #3
Membre régulier
 
Inscription : avril 2006
Messages : 118
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 118
Points : 72
Points : 72
Citation:
Envoyé par Mercure
Ajoute le mot clé ALWNULL sur la DDS de ta zone date ensuite repasse ton INSERT :


Code :
1
2
3
DTANNUL         L         ALWNULL
                          COLHDG('Date' 'annulation')  
                          DATFMT(*EUR)
Il n'y a pas moyen de passer null ou quelque chose d'équivalent dans le insert?
Je voudrais insérer une date initialier à '01.01.0001' mais j'ai une erreur :
Citation:
Partie Année de la valeur Date ou Horodatage non comprise dans
la plage admise.
Cela vient-il de l'absence de ce mot clé?

En fait je voudrais éviter de recompiler mon DDS et tous mes programmes l'utilisant...
_Jnie_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/06/2007, 11h47   #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
Il faudrait savoir si c'est null ou une date que tu veux insérer ?
En tout cas, c'est pas malin d'avoir mis DATFMT(*EUR) dans la définition de la zone et, si tu pouvais supprimer cette fonction de ton PF, ça n'en serait que mieux.

Si je comprends bien, tu dois vouloir insérer la date 01.01.0001 en ayant fait appel à une session SQL par STRSQL. Est-ce que c'est çà ?
Mercure est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/06/2007, 12h05   #5
Membre régulier
 
Inscription : avril 2006
Messages : 118
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 118
Points : 72
Points : 72
Citation:
Envoyé par Mercure
Il faudrait savoir si c'est null ou une date que tu veux insérer ?

Si je comprends bien, tu dois vouloir insérer la date 01.01.0001 en ayant fait appel à une session SQL par STRSQL. Est-ce que c'est çà ?
Je veux rien insérer du tout justement, quand je fais mon insert si je ne renseigne pas les zones dates en général, il met automatiquement la date du jour...Je voudrais que quand je m'occupe pas de cette zone, ben, il mette rien!

Mon insert est dans un prog, par exec sql/end-exec (mais j'ai la meme chose si je copie/colle dans strsql)

Citation:
Envoyé par Mercure
En tout cas, c'est pas malin d'avoir mis DATFMT(*EUR) dans la définition de la zone et, si tu pouvais supprimer cette fonction de ton PF, ça n'en serait que mieux.
Une petite explication?
Je débute, donc, je reproduis ce qui existe...
_Jnie_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/06/2007, 12h39   #6
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
Cette histoire de date m'intrigue un peu quand même.
Regarde par DSPFD s'il n'y a pas un programme déclencheur (trigger) qui serait associé au fichier et qui mettrait la date du jour dans la date annulation lors d'un INSERT ?

Quant à déclarer le format de la date dans le fichier, c'est inutile car les dates sont insérées dans les fichiers sous un format binaire géré par l'OS. Indiquer DATFMT(*EUR) n'est utile qu'à l'affichage pour avoir le format européen (sic) à l'écran, avec des points comme séparateurs. D'ailleurs, mets-toi sous STRSQL, fais F13 et change le format de date en *ISO ou *DMYpar ex. puis passe une SELECT sur le fichier. Tu verras que les zones définies en type date (L) apparaîssent maintenant au format ISO (2007-06-08) ou au format DMY (08/06/07) selon le format que tu as choisi pour affichage. Mêmes effets pour les clauses INSERT et UPDATE. Tu peux insérer une date au format ISO dans tes tables et la consulter à l'écran au format DMY.
Mercure est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/06/2007, 17h58   #7
Membre régulier
 
Inscription : avril 2006
Messages : 118
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 118
Points : 72
Points : 72
Citation:
Envoyé par Mercure
Cette histoire de date m'intrigue un peu quand même.
Regarde par DSPFD s'il n'y a pas un programme déclencheur (trigger) qui serait associé au fichier et qui mettrait la date du jour dans la date annulation lors d'un INSERT ?
Vérification faite : pas de trigger.
Une autre table fait la même chose. Je vais tester sur plusieurs autres pour voir...
En attendant je réinitialise ma date juste après par un update, en attendant de mettre à jour ma table.

Citation:
Envoyé par Mercure
Quant à déclarer le format de la date dans le fichier, c'est inutile car les dates sont insérées dans les fichiers sous un format binaire géré par l'OS. Indiquer DATFMT(*EUR) n'est utile qu'à l'affichage pour avoir le format européen (sic) à l'écran, avec des points comme séparateurs. D'ailleurs, mets-toi sous STRSQL, fais F13 et change le format de date en *ISO ou *DMYpar ex. puis passe une SELECT sur le fichier. Tu verras que les zones définies en type date (L) apparaîssent maintenant au format ISO (2007-06-08) ou au format DMY (08/06/07) selon le format que tu as choisi pour affichage. Mêmes effets pour les clauses INSERT et UPDATE. Tu peux insérer une date au format ISO dans tes tables et la consulter à l'écran au format DMY.
Je comprend. Mais dans notre contexte (utilisation d'un outil graphique) il est plus simple de formater dès la définition la date.
_Jnie_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/06/2007, 13h45   #8
Membre à l'essai
 
Inscription : juin 2002
Messages : 32
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 32
Points : 21
Points : 21
Je ne sais quelle version de db2 tu utilise
Moi pour insérer des null dans des champs type date, j'utilise le "cast"
Citation:
cast(null as date)
Bougeard est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2007, 10h30   #9
Membre régulier
 
Inscription : avril 2006
Messages : 118
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 118
Points : 72
Points : 72
Citation:
Envoyé par Bougeard
Je ne sais quelle version de db2 tu utilise
Moi pour insérer des null dans des champs type date, j'utilise le "cast"
N'ayant pas défini ma colonne en ALWNULL, c'est impossible...
_Jnie_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h32.


 
 
 
 
Partenaires

Hébergement Web