Dovevo trasferire rapidamente i dati da una singola tabella in un db MySQL a quattro distinte – in modo da normalizzare un po’ i dati.

Con perl e DBI la cosa viene facile.

#!/usr/bin/perl

use strict;
use DBI;
[]
my $dsn = "dbi:mysql:database=$db_name";
my $dbh = DBI->connect( $dsn, $username, $password ) or die $DBI::errstr;

my $sth = $dbh->prepare(
    ‘SELECT name, surname, birth, address, cap, city, country, phone, email, notes FROM rubrica’
) or die $dbh->errstr;
$sth->execute();

my $ins0 = $dbh->prepare(
    ‘INSERT INTO persone (nome,cognome) VALUES (?,?)’
) or die $dbh->errstr;
my $ins1 = $dbh->prepare(
    ‘INSERT INTO indirizzi (id,via,cap,citta,paese) VALUES (?,?,?,?,?)’
) or die $dbh->errstr;
[… ecc, seguono altri statement insert …]

while ( my $row = $sth->fetchrow_hashref() ) {
        $ins0->execute( $row->{name}, $row->{surname} );
        my $rv = $dbh->last_insert_id(undef, undef, ‘persone’, ‘id’);

        $ins1->execute( $rv, $row->{address}, $row->{cap}, $row->{city}, $row->{country} );
        []
 }

La cosa interessante sta in quel last_insert_id che raccatta l’ultimo valore auto incrementato e lo mette in uno scalare, riutilizzabile poi in altri insert per avere le foreign key allineate.




Write a comment


You need tologin.

    
SIMOTRONE WEB PAGE is based on WordPress platform, RSS tech , RSS comments design by Gx3.