Schrift
[thread]3662[/thread]

Datenbank einträge vergleichen und einfügen: Datenbank einträge vergleichen und einfü (Seite 2)



<< |< 1 2 >| >> 16 Einträge, 2 Seiten
martin101
 2006-03-11 11:25
#34084 #34084
User since
2006-03-07
8 Artikel
BenutzerIn
[default_avatar]
[quote=murphy,07.03.2006, 17:19]Außerdem dürfte es effizienter sein, die Daten nicht erst in Perl auszulesen und dann wieder in die SQL-Maschine zu füttern, sondern alles in einem SQL-Befehl zu erledigen:
Code: (dl )
INSERT INTO neue_tabelle(feld0, feld1, ...) SELECT feld0, feld1, ... FROM alte_tabelle WHERE bedingung ...;

Dabei kann man natürlich auch noch doppelte Einträge entfernen lassen, indem man einfach
Code: (dl )
INSERT INTO neue_tabelle(feld0, feld1, ...) SELECT DISTINCT feld0, feld1, ... FROM alte_tabelle WHERE bedingung ...;
daraus macht.[/quote]
Ich greife jetzt aber auf zwei Datenbanken zu.

$dbh um die Daten zu holen
$dbh1 um die Daten einzufügen

Jetzt ist ja alles in einem Befehl.
Kann ich $dbh denn zugriff auf beide Datenbanken ermöglichen?
nepos
 2006-03-11 12:11
#34085 #34085
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Meines wissens nein. Ich denke, dann musst du wohl den Umweg ueber den Arbeitsspeicher gehen. So musste ich das bei mir auch schon mal machen. Da wurden Daten aus einer alten Datenbank in eine neue konvertiert.
martin101
 2006-03-11 16:32
#34086 #34086
User since
2006-03-07
8 Artikel
BenutzerIn
[default_avatar]
[quote=martin101,07.03.2006, 15:24]-------
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
  
#SQL-Abfrage -500=5Minuten; -50000=5Stunden JJJJMMDDHHMMSS

$sth =$dbh->prepare ("
SELECT *
FROM Daten
WHERE time BETWEEN sysdate()-500000 AND sysdate()-0
");

$sth->execute ();

while
( @zeile =$sth->fetchrow_array ())
{
printf br
("ID = %s, time = %s, gerät = %s, beschreibung = %s, text = %s, index =%s, test = %s" ),
$id=$zeile[0],
$time=$zeile[1],
$geraet=$zeile[2],
$beschreibung=$zeile[3],
$text=$zeile[4],
$index= $zeile[5],
$test=$zeile[6],
};

$dbh1->do
(qq
{ID, time, gerät , beschreibung , text, index , test ")
VALUES(?,?,?,?,?,?,?)
},
undef,
$id,
$time,
$geraet,
$beschreibung,
$text,
$index,
$test,

);
[/quote]
wenn alles in der while Schleife steht sollte es gehen, oder?
renee
 2006-03-12 16:15
#34087 #34087
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Das kann mit dem do kannst Du auch kürzer schreiben:
Code: (dl )
1
2
3
4
5
 $dbh1->do
(qq{INSERT INTO tabellenname (ID, time, gerät , beschreibung , text, index , test)
VALUES(?,?,?,?,?,?,?)
},
undef,@zeile);
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
martin101
 2006-03-18 23:05
#34088 #34088
User since
2006-03-07
8 Artikel
BenutzerIn
[default_avatar]
[quote=nepos,11.03.2006, 11:11]Meines wissens nein. Ich denke, dann musst du wohl den Umweg ueber den Arbeitsspeicher gehen. So musste ich das bei mir auch schon mal machen. Da wurden Daten aus einer alten Datenbank in eine neue konvertiert.[/quote]
Kannst du mir ein Beispiel dazu geben?
Bei mir geling es nicht wirklich

Danke
nepos
 2006-03-18 23:11
#34089 #34089
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Uhm, was soll ich dir da gross nen Beispiel geben?
Ein Statementhandle machen fuers einlesen, eines fuer die Inserts und dann halt in ner while-Schleife solange inserten, solange was kommt...
<< |< 1 2 >| >> 16 Einträge, 2 Seiten



View all threads created 2006-03-07 16:24.