Werte zwischen zwei Tabellen kopieren

Fragen und Probleme rund um die Abfragespache SQL.

Werte zwischen zwei Tabellen kopieren

Beitragvon siwy » Di 2. Sep 2008, 11:24

Hallo,

ich möchte Datensätze täglich zwischen zwei Tabellen kopieren.
Die Quelltabelle besitzt eine Spalte mit einer laufenden Nummer.
Die höchste Nummer soll in einer TMP-Tabelle abgespeichert werden.
Beim nächsten kopieren soll erstmal in der TMP Tabelle geschaut werden, welche Nummer die höchste ist und ab der Nummer sollen die Datensätze verschoben werden.

Hat jemand eine Idee ?? Jede Hilfe ist willkommen

Gruss
siwy
Neuer Benutzer
 
Beiträge: 1
Registriert: Di 2. Sep 2008, 11:01

Beitragvon symbiont » Di 2. Sep 2008, 11:56

siwy hat geschrieben:Hallo,

ich möchte Datensätze täglich zwischen zwei Tabellen kopieren.

Hat jemand eine Idee ?? Jede Hilfe ist willkommen

Gruss


1. dafuer sorgen, dass die src-table und target-table ihre eigenen id's haben (id_src und id_trg)

2. dafuer sorgen, beide tables aufeinander referenzieren - die foreign-keys sollten mit not null definiert sein, wenn du folgenden 3.1. anwendest :)

3.1 ENTWEDER, BEFORE INSERT - trigger auf source-table die eine trigger funktion aufruft, welche den kopie-datensatz erzeugt UND gleichzeitig die eigene referenz auf die kopie im original-datensatz speichert (so weisst du 1. dass für einen datensatz eine kopie existiert und 2. welcher datensatz die kopie ist

3.2 ODER, einfach eine server-funktion/stored-procedure (wie dus auch immer nennen magst) die das obige (3.1) ueber ein SELECT INTO erledigt (also für mehrere datensaetze in einem rutsch) - da koenntest du dann einen AFTER INSERT trigger auf der target-tabelle die eigene ID in der quelle updaten ..

also so in etwa wuerd ich das machen ..
symbiont
Erfahrener Benutzer
 
Beiträge: 1328
Registriert: Mo 17. Mär 2008, 12:45
Wohnort: NULL

Beitragvon akretschmer » Di 2. Sep 2008, 13:06

siwy hat geschrieben:Hallo,

ich möchte Datensätze täglich zwischen zwei Tabellen kopieren.

Kopieren oder, wie später geschrieben, verschieben?

Die Quelltabelle besitzt eine Spalte mit einer laufenden Nummer.
Die höchste Nummer soll in einer TMP-Tabelle abgespeichert werden.
Beim nächsten kopieren soll erstmal in der TMP Tabelle geschaut werden, welche Nummer die höchste ist und ab der Nummer sollen die Datensätze verschoben werden.

Hat jemand eine Idee ?? Jede Hilfe ist willkommen

Gruss


Neben der schon genannten Variante mit einem TRIGGER geht das auch z.B. so:

Code: Alles auswählen
test=# create table source (i int);
CREATE TABLE
Zeit: 214,126 ms
test=*# create table destination (i int);
CREATE TABLE
Zeit: 0,930 ms
test=*# insert into source values (1);
INSERT 0 1
Zeit: 0,407 ms
test=*# insert into source values (2);
INSERT 0 1
Zeit: 0,140 ms
test=*# insert into destination values (3);
INSERT 0 1
Zeit: 0,323 ms
test=*# insert into destination select * from source except select * from destination ;
INSERT 0 2
Zeit: 0,671 ms
test=*# select * from destination ;
 i
---
 3
 1
 2
(3 Zeilen)

Zeit: 0,178 ms
test=*# insert into source values (4);
INSERT 0 1
Zeit: 0,185 ms
test=*# insert into destination select * from source except select * from destination ;
INSERT 0 1
Zeit: 0,312 ms
test=*# select * from destination ;
 i
---
 3
 1
 2
 4
(4 Zeilen)



Also, simpel schauen, was noch nicht in destination ist und das einfügen.

Andreas
--
ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)

https://www.xing.com/profile/Andreas_Kretschmer7
Hosting-Provider mit PostgreSQL-Support gesucht? Mich fragen!
akretschmer
Erfahrener Benutzer
 
Beiträge: 5938
Registriert: So 29. Okt 2006, 14:35
Wohnort: Kaufbach, Sachsen, Germany, Germany


Zurück zu SQL

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste