1

Temat: funkcja kopiująca i usuwająca dane dla dwóch tabel

Witam.
To mój pierwszy post więc witam i pozdrawiam wszystkich smile

W bazie mam dwie tabele: DBF1 i DBF1temp, obie identyczne tj, każda ma 9 kolumn kol1, ... kol9.
W kol3 jest nazwa obiektu, która jest unikalna.
W tabeli DBF1 mam ostatnio aktualną listę obiektów
Tabelę DBF1temp czyszczę i wczytuję do niej nową listę obiektów

Potrzebuję napisać funkcję, która by

I. Dla każdej wartości w kol3 w DBF1
    1. jeśli nazwa obiektu (kol3) istnieje w DBF1temp wtedy:
         -przepisz wartość kol1 i kol2  z DBF1temp do DBF1
         -skasuj wiersz z tą nazwą obiektu z DBF1temp
     w przeciwnym wypadku
        skasuj wiersz z DBF1
     2. skopiuj pozostałe wiersze z DBF1temp do DBF1

2

Odp: funkcja kopiująca i usuwająca dane dla dwóch tabel

rozważ poniższy przykład (ostatnie 4 polecenia wykonują to o co Ci chodziło)

create table DBF1 (
kol1 int,
kol2 int,
kol3 int not null unique,
kol4 int,
kol5 int,
kol6 int,
kol7 int,
kol8 int,
kol9 int);

create table DBF1temp (like DBF1);
insert into DBF1 (kol3) select * from generate_series (1,10);
insert into DBF1temp (kol1,kol2,kol3) select d.kol3,d.kol3,d.kol3 from generate_series (5,15) d(kol3);

update DBF1 s set kol1 = t.kol1 , kol2=t.kol2 from DBF1temp t where s.kol3=t.kol3;
delete from DBF1 t where not exists (select 1 from DBF1temp s where s.kol3=t.kol3);
delete from DBF1temp t where exists (select 1 from DBF1 s where s.kol3=t.kol3);
insert into DBF1 select * from DBF1temp;

3

Odp: funkcja kopiująca i usuwająca dane dla dwóch tabel

OK, bardzo dziękuję, to jest dokładnie to o co chodziło.
Jestem jeszcze bardzo początkujący i myślałem, że trzeba będzie użyć jakąś pętlę wskazującą, że to dla wszystkich pól w kolumnie...