Hey guys.  I am still quite new to the database world and obviously
in need of help.  Not sure if I am just stupid, or if there is really very
little information to be found concerning UPDATE statements.  I am working
on a MySQL database with Perl 5.6.0 and the latest DBI version.  I am doing
fine with connectivity, in that I have INSERT and SELECT statements working
fine.  My problem is that an UPDATE statement that I have been working with
is NOT working.  Here is, I hope, the relevant portion of the code.


    my $test = $dbh->prepare("SELECT * FROM systems WHERE Name ='$name'");
    $test->execute ();
    if ($test) {
      while (my $ref = $test->fetchrow_hashref ('NAME_lc')) {
        undef $set;
        foreach my $key (keys %$ref) {
          unless ($$key eq $ref->{$key}) {
            $set .= " , " if $set;
            $set .= $key . "=$$key";
          }
        }
        if ($set) {
          print "$name found in database.  Updating information for $name.
\n";
          print "$set \n";
          $dbh->do(q{UPDATE systems SET = $set WHERE Name = $name LIMIT 1});
        } else {
          print "$name found in database to be current.  No update
necessary. \n";
        }
      }
      } else {
        print "$name was NOT found in database.  Adding database entry for
$name.  \n";
        $dbh->do("INSERT INTO systems
VALUES('$name','$id','$ip','$model','$cpunum','$speed','$os_ver','$mem','$sc
si','$fibre','$disks','$size','$tapes','$sa')")
          or print "Error updating database:  ", $dbh->errstr, "\n";
    }
  }


        This database stores system information.  I have written Perl
scripts to collect all of this information from the systems, format the
output, and FTP it over to the database server.  I have no problem INSERTing
new systems into the database, the problem I have is UPDATEing existing
systems.  I know that I could simply DELETE and then INSERT the system again
with all of the new information, but this seems a very inelegant way of
handling this.  Any help would be GREATLY appreciated.

Scott Nipp
Systems Analyst
SBC Long Distance
(214) 858-1289

Reply via email to