Bonjour à tous,
Voilà mon souci. Je traite un fichier d'environ 7000 lignes. Pour chaque ligne je compare une donnée de la ligne à qui constitue une donnée unique. Si cette donnée est présente dan sma base de donnée, j'update les champs de l'enregistrement correspondant, sinon, j'insère un nouvel enregistrement.
Voilà mon code:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
 
#!c:\perl\bin\perl.exe
####### Packages #######################
use TX2::BD;
use TX2::Tools;
use DBI;
$start=&TX2::Tools::GetDate('français');
print "Start: $start\n";
########################################
####### Variables ######################
$TrRcvDoc=".\\TRRCVDOC.txt";
$table='trrcvdoc';
$nbinsertion=0;
$nbupdate=0;
########################################
 
open(TRRCVDOC,$TrRcvDoc) or die "Erreur ouverture $TrRcvDoc $! \n";
@TRRCVDOC=<TRRCVDOC>;
close (TRRCVDOC);
@newtab=map{ [substr($_,0,6),
                  substr($_,6,5),
                  substr($_,22,6),
                  substr($_,28,5),
                  substr($_,33,6),
                  substr($_,39,5),
                  substr($_,44,14),
                  substr($_,58,14),
                  substr($_,72,20),
                  substr($_,92,1),
                  substr($_,93,1),
                  substr($_,94,5),
                  substr($_,120,35),
                  substr($_,155,35),
                  substr($_,190,20),
                  substr($_,210,1),
                  substr($_,211,6),
                  substr($_,217,3),
                 ] } @TRRCVDOC; 
 
$dbh=&TX2::BD::Connexion();
 
foreach(my $i=0;$i<=$#newtab;$i++)
{
    $req=$dbh->prepare("SELECT DATE_CREATION_DOC from trrcvdoc WHERE NUM_MESSAGE=\'$newtab[$i][8]\'");
    $req->execute();
    my $res=$req->fetchrow_array();
    $req->finish();
    if ($res ne "")
    {
          &TX2::BD::UPDATE($dbh,$table,'NUM_MESSAGE',$newtab[$i][8],'CODE_STATUT_1',$newtab[$i][9]);
          $nbupdate++;
    }
    else
    {
          $insert="INSERT INTO trrcvdoc VALUES ('',";
          for(my $j=0;$j<=16;$j++)
          {
              $insert.="\'".$newtab[$i][$j]."\',";
          }
          $insert.="\'".$newtab[$i][17]."\')";
          $dbh->do($insert);
          $insert="";
          $nbinsertion++;
    }
 
$k++;
}
&TX2::BD::Deconnexion($dbh);
$end=&TX2::Tools::GetDate('français');
print "End: $end\nDONE: $nbinsertion insertion(s) -- $nbupdate update(s)\n";
Et bien, ce processus se fait en plus de 6 minutes prends 100% de mon UC.
Machine: DELL Latitude D600
Processeur: intel xeon 1,6ghz
RAM: 512 Mo
Version Perl: 5.8.6
php myadmin 2.6.1


Y a t'il un problème dan mon code pour que ce soit aussi long ? car il y a vraiment très peu d'enregistrement dans ma base, 10000 tout au plus pour l'instant !!