SELECT vorkompilieren mit Perl und DB2
- Dieses Thema hat 3 Antworten und 1 Teilnehmer, und wurde zuletzt aktualisiert vor 18 Jahre, 3 Monaten von
Anonym.
-
AuthorPosts
-
14. Juni 2005 um 7:36 Uhr #2558
AnonymGastMoin Leute,
ich hab ein Problem mit ner DB2-Klamotte, und zwar muss ich nen ganzen Haufen werte erst SELECTen und dann INSERTen.Bei dem INSERT ist das ganze kein Problem…
Vor ner großen While-Schleife:
my $sql_insert = "INSERT INTO tabelle2 (wert1, wert2, wert3, wert4, wert5) VALUES (?, ?, ?, ?, ?)";
my $query_insert = $dbh->prepare ($sql_insert);In der While-Schleife:
$query_insert->execute($wert1,$wert2,$wert3,$wert4,$wert5);Nach der While-Schleife:
$query_insert->finish;Wenn ich aber das gleiche mit ner Select-Anweisung probiere, bekomme ich "Undefined Cursor State" als Antwort.
Wenn ich die Select ohne vorkompilieren und Platzhalter "?", also mit den Variablennamen im SQL in die DB schmeiße funzt das einwandfrei. Nur bei den Massen von Daten die das Script verwursten muss is das ohne vorkompilieren viel zu langsam.
Hab im Web bis jetzt auch nur Beispiele mit INSERT und UPDATE gefunden.Wär cool wenn jemand von euch ne Lösung für mich hätte.
Grüße,
Xcalibur
14. Juni 2005 um 10:54 Uhr #3008
AnonymGastHi Xcalibur,
hört sich an als ob das Ganze über Insert mit Subselect lösbar wäre, hast du darüber schon mal nachgedacht?
Für Perl gibt es im DB2 keine direkte Schnittstelle, vermutlich wird hier in der $dbh-Anweisung ein CAF-Programm aufgerufen. Kannst du da einen Cursor definieren?MfG Rolf
14. Juni 2005 um 11:39 Uhr #3322
AnonymGastDanke für die schnelle Antwort,
ich hatte vergessen zu schreiben wie ich auf die Datenbank zugreife. Für den Zugriff benutze ich das Perl-Modul DBI. Im System habe ich unterhalb dieses Zugriffs aber leider keinen weiteren Einfluss.mein DB2-Zugriff
use DBI;$dbh = DBI->connect("dbi:DB2:DB-Kennung", $username, $password) or die "connect nicht moeglich: " . $DBI::errstr;
Eine Bedingung für die INSERT-Anweisung hab ich schon auf dem Plan, allerdings hab ich ich in der großen Schleife 2 weitere Selects, die auch Werte wiedergeben müssen, also nicht in eine andere Anweisung eingebaut werden können. Es wär also nur eine Teillösung meines Performanceproblems.
15. Juni 2005 um 17:31 Uhr #3518
AnonymInaktivHi,
so geht’s auch, Performance ist ok:
…$stmt = "INSERT INTO SNAP_DB ".
"(PROJECT, DATABASE, SNAP_TS,VAR,VALC,VALN) ".
"VALUES(‚$opt_mp‘, ‚$database‘,".
"’$snap_ts‘,’$var‘,’$valc‘,$valn)";$sth = $dbh->prepare($stmt) || die "Statement $stmt";
$sth->execute() || die "Statement $stmtn".$dbh->errstr;
…
Ciao
Gernot
-
AuthorPosts
You must be logged in to reply to this topic.