1

Temat: problem z napisaniem funkcji

Chciałem tylko sprawdzić czy to będzie działać, bo męczę się z pewną funkcją i nie mogę nic wykombinować.
Opiszę o co mi chodzi, to mam nadzieję, że ktoś pomoże:

mam główną tabelę 'baza', która ma kolumny:
trader_id, order_nbr integer, symbol, net_pl, event_date, time
dane do niej wczytuję z pliku *.csv.
Szukana funkcja zwracałaby wartości takie jak zapytanie:
select trader_id, sum(net_pl), count(distinct order_nbr), event_date from baza
które następnie byłyby zapisywane w innej tabeli, to by się odbywało automatycznie za pomocą trigger ... for each row.

Nie wiem jak się za to zabrać, jakieś pomysły?

2

Odp: problem z napisaniem funkcji

Nie wiem czy załapałem, ale z tego co wiem funkcja zwraca jedną wartość, więc musiał byś utworzyć odpowiedni typ dla zwracanego wyniku. A czy trigger nie może wykonać   Insert into inna_tabela .... select trader_id, sum(net_pl), count(distinct order_nbr), event_date from baza  ??

3

Odp: problem z napisaniem funkcji

zrobiłem tak właśnie, że trigger wykonuje mi ten 'insert into inna_tabela...' , tylko problem polega na tym, że robi to dla każdego inserta to tabeli 'baza', wygląda to tak:
900 (insert to tabeli baza) * 5 (wynik z insert into inna_tabela) = 4500 (wierszy w inna_tabela)
a powinienem otrzymać tylko 5

4

Odp: problem z napisaniem funkcji

Jakoś nie łapie, jest tabela "baza" z danymi z csv i co dalej?  select trader_id, sum(net_pl), count(distinct order_nbr), event_date from baza -> zwraca x wierszy ?? ,  trigger po jakim zdarzeniu?

Jaki jest cel ? - zebrać dane z zapytania i wrzucić je do nowej tabeli ??

5

Odp: problem z napisaniem funkcji

mam funkcję, która wczytuje dane z pliku csv, ale zapisuje tylko te wiersze, których jeszcze nie ma w tabeli 'baza',
następnie chcę aby trigger
FOR EACH ROW
zebrał dane z zapytania 'select...' dla tych wierszy, które zostały aktualnie wpisane do tabeli 'baza', i zapisał te wyniki do nowej tabeli

6

Odp: problem z napisaniem funkcji

To może lepiej zrobić tak
1)funkcja zapisywałaby wiersze których jeszcze nie ma do tabeli tymczasowej wpierw czyszcząc jej zawartośc.
2) trigger zdefiniować na tej tabeli tymczasowej (wtedy bedzie mial mniej danych do przegladania)
3) przenieść dane z tabeli tymczasowej do docelowej (zwykly 'insert into tabela_docelowa select * from tabela_tymczasowa')