Klaus Mock: DBi und DBD-Oracle

Beitrag lesen

Hallo,

Wenn ich mehrere Records untereinander in das Skript einfüge, um die Tabelle zu füllen, wird in der Tabelle einfach nur die erste Zeile überschrieben!!!

Hast Du auch immer brav mit Transaktionen gearbeitet?

Muss ich nach jedem neuen Zeileneintrag explizit die Zeile wechsel ??

Es gibt bei Datenbanken keine Zeilen, geschweige denn der Möglichkeit diese zu wechseln.

Ich verwende üblicherweise folgendes 'Grundgerüst' (naja mehr oder weniger *g*):

my ($field1,$field2,$field3);

my $dbh = DBI->connect('dbi:Oracle:host=somehost;sid=MYSID', 'user', '$pwd',
                    { RaiseError => 1, AutoCommit => 0 })
       or die 'unable to connect database: '.$DBI::errstr ;

AutoCommit ist bei mir immer abgeschaltet

my $sth = $dbh->prepare('INSERT INTO table (field1, field2, field3) VALUES (?, ?, ?)') or die 'unable to prepare statement'.$dbh->errstr;

ich verwende immer Bindvariablen, die Platzhalter sind hier '?'

my ($field1,$field2,$field3);
while(($field1,$field2,$field3) = getmyinsertdata())
  {
  # execute führt das mit prepare vorbereitet Statement mit den aktuellen Werten von $field1,$field2 und $field3 aus
  $sth->execute($field1,$field2,$field3) or die $dbh->errstr;
  }
$dbh->commit or die $dbh->errstr;

nur wenn alles gut gegangen ist, wird ein COMMIT ausgeführt.

$dbh->disconnect or die $dbh->errstr;

Näheres dazu findest Du unter
http://search.cpan.org/~timb/DBI-1.39/DBI.pm
bzw.
http://search.cpan.org/~timb/DBD-Oracle-1.14/Oracle.pm.

Oder noch besser in der Perldokumentation auf Deinem Rechner.

Grüße
  Klaus