Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#1 20/04/2011 10:48:27
- ZouZou
- Membre
Envoyé default et non "default" a postgresql
Bonjour,
Je reviens vous voir avec nouveau défis:).
J’ai un script en perl qui lis un fichier ligne par ligne, vérifie la validité de informations contenue dans la ligne et les ajoutes dans ma base.
Une partie de mon script a pour but d’affecter dans ma base la valeur par défaut indiquer dans ma base, si l’élément est manquant. J’affecte donc à ma variable « default ».
Mon problème arrive au moment d’exécuté ma requête. J’obtiens le message d’erreur : «ERROR: value for domain situation_recherche violates check constraint ».
Si j’ai bien compris le problème lors de mon insert into, default est lu comme ça :
« Insert into table_exemple (v1,v2,v3) values(‘toto’,’default’,’12 ans’ );»,
Je souhaiterais savoir s’il est possible de faire comprendre à la base de donnée que la requête doit ce lire comme ça: « Insert into table_exemple (v1,v2,v3) values(‘toto’,default,’12 ans’ );».
Ou dois-je commencer à chercher une autre solution ? ^^
Cordialement ZouZou
Hors ligne
#2 20/04/2011 10:51:04
- Marc Cousin
- Membre
Re : Envoyé default et non "default" a postgresql
sans le bout de code, difficile de savoir ce qui se passe réellement. Mais oui, vous devez envoyer default sans quotes autour.
Marc.
Hors ligne
#3 20/04/2011 11:02:29
- ZouZou
- Membre
Re : Envoyé default et non "default" a postgresql
Bonjour Marc,
merci de votre intervention rapide.
je vous montre les parties de mon code qui effectue ce traitement.
voici l'affectation de default a ma variable :
sub par_default{
my $valeur=$_[0];
if ($valeur eq "" or $valeur == 0){
my $valeur="default";
return $valeur;
}
else {
return $valeur;
}
}
extrait du script qui insére dans la base de donnée:
while ($ligne=<NEW_DONNE>){
chomp($ligne);
my ($module,$elem,@rest)= split /;/,$ligne;
if ($module eq "" or $elem eq""){
print "Les informations sont manquante \npas d'insertion dans la base pour la ligne $ligne \n";
}
else {
my $req1="select nom_module from description_module where nom_module=?";
my $modul_existe=$db->prepare($req1);
$modul_existe->execute($module);
my $test=$modul_existe->rows;
if ($test == 0){
print "$module n'existe pas \n";
#on crée
if ( $elem =~ /^([0-9]{1,3}\.){3}[0-9]{1,3}$/){
if (&adresse_valide($elem)){
my ($surv,$freq_ex,$periode,$freq_attente)= @rest;
$surv = &par_default($surv);
$freq_ex = &par_default($freq_ex);
$periode = &par_default($periode);
$freq_attente = &par_default($freq_attente);
my $req_add_module="insert into description_module (nom_module, surveillance_recherche, requence_d_execution_du_module, Periode_d_attente_entre_deux_executions, Frequence_d_interogation_du_module, Adresse_ip) VALUES (?,?,?,?,?,?)";
my $add_module=$db->prepare($req_add_module);
print "$module,$surv,$freq_ex,$periode,$freq_attente,$elem\n";
$add_module->execute($module,$surv,$freq_ex,$periode,$freq_attente,$elem);
$add_module->finish();
}
else{
print "adresse non valide, l'ajout dans la base impossible \nVeuiller indiquer une adresse conforme pour la ligne $ligne \n";
}
}
voila j'espère que vous comprendrez ce que je veux faire ^^
Dernière modification par ZouZou (20/04/2011 11:06:40)
Hors ligne
#4 20/04/2011 11:32:09
- Marc Cousin
- Membre
Re : Envoyé default et non "default" a postgresql
C'est un peu tordu: DBI n'implémente pas cette notion de DEFAULT pour le moment. Par contre le DBD (le driver) postgres le fait, au moyen d'un symbole, qui n'est pas exporté par défaut. Voici un petit exemple qui crée un enregistrement dans une table avec sa valeur par défaut, au moyen d'une requête préparée:
use DBI;
use DBD::Pg qw($DBDPG_DEFAULT);
my $dbh=DBI->connect("dbi:Pg:dbname=marc");
my $sth=$dbh->prepare("INSERT INTO test VALUES(?)");
$sth->execute($DBDPG_DEFAULT);
Le 'truc', c'est de récupérer «$DBDPG_DEFAULT» de DBD::Pg. Après, on peut l'utiliser comme constante dans le code. C'est une référence d'objet, pas un scalaire, ce qui fait que DBD::Pg, quand il le voit, est capable de savoir qu'on a réellement un DEFAULT à cet endroit. C'est un peu sale, mais tant que ce n'est pas quelque chose qui existe au niveau de la couche DBI, il y a recours à ce genre de bidouille :(
Dernière modification par Marc Cousin (20/04/2011 11:32:37)
Marc.
Hors ligne
#5 20/04/2011 11:36:52
- ZouZou
- Membre
Re : Envoyé default et non "default" a postgresql
ha d'accord ! j'imaginais pas ça comme ça
je vous remercie Marc, je vais essayé de faire une bidouille dans le genre je vous tiendrais au courant si j'ai réussie
merci beaucoup
Hors ligne
#6 20/04/2011 11:41:33
- ZouZou
- Membre
Re : Envoyé default et non "default" a postgresql
ça marche !! je crois que j'ai trouvé mon Dieu sur terre lol merci !!!
cordialement ZouZou
Hors ligne
Pages : 1