Thread query wird nicht ausgeführt
(8 answers)
Opened by plautzenpa at 2008-01-08 17:45
Du hast dir anscheinend die Doku nicht genau durchgelesen :)
Der Aufruf von trace() setzt das Trace-Level und liefert das alte Level als Wert zurück. Wenn das Trace-Level ungleich 0 ist, gibt dir DBI je nach Level mehr oder weniger Informationen aus. Du packst also einfach den Aufruf von trace() vor deine SQL-Aufrufe dazu. Dann sollten auf STDERR die entsprechenden Trace-Meldungen auflaufen: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 my $tabelle = shift; # Neue Spalten hinzufügen $sql = "ALTER TABLE $tabelle ADD _email_first_part VARCHAR( 255 ) NOT NULL AFTER email, ADD _email_last_part VARCHAR( 255 ) NOT NULL AFTER _email_first_part"; $dbh->do($sql); if($DBI::err) { dbError("3084 dbUpdateEmailPartRows (SQL: $sql) (do): $DBI::errstr"); return 0; } # Index über diese Spalten legen $sql = "ALTER TABLE $tabelle ADD INDEX ( _email_first_part , _email_last_part )"; $dbh->do($sql); if($DBI::err) { dbError("3089 dbUpdateEmailPartRows (SQL: $sql) (do): $DBI::errstr"); return 0; } # Da hier der Fehler ist, trace einschalten $dbh->trace(2); # Daten aus der Spalte 'email' erzeugen und in die neuen Spalten einfügen. $sql = "UPDATE $tabelle SET _email_first_part = SUBSTR( email, 1, POSITION( '\@' IN email) ), _email_last_part = SUBSTRING( email, POSITION( '\@' IN email) , LENGTH( email ) - POSITION( '\@' IN email ) +1 )"; $dbh->do($sql); if($DBI::err) { dbError("3094 dbUpdateEmailPartRows (SQL: $sql) (do): $DBI::errstr"); return 0; } # Und Trace wieder abschalten $dbh->trace(0); Wenn dir das mit STDERR nicht gefällt, dann kannst du die Ausgabe von Trace auch in eine Datei umleiten: Code (perl): (dl
)
$dbh->trace(2,'/tmp/dbi_trace.log'); |