cordialement ZouZou
]]>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
]]>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 :(
]]>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 ^^
]]>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
]]>