· 6 years ago · Jun 03, 2019, 12:44 PM
1CREATE TABLE alior.logi (
2 id serial PRIMARY KEY,
3 data_stworzednia timestamp,
4 info varchar(255)
5);
6
7
8create or replace function obliczSaldoKlienta(id_klienta bigint,data_poczatkowa date,data_koncowa date) returns money
9 language plpgsql
10 AS $$
11BEGIN
12
13 IF $2 W $3 THEN
14 INSERT INTO alior.logi (data_stworzednia, info) values (NOW(), 'Blad');
15 RETURN NULL;
16 END IF;
17
18 IF NOT EXISTS (SELECT 1 FROM klienci WHERE id_klienta = $1) THEN
19 INSERT INTO alior.logi (data_stworzednia, info) values (NOW(), 'Blad');
20 RETURN NULL;
21 END IF;
22
23 IF NOT EXISTS (SELECT 1 FROM rachunki_bankowe WHERE id_klienta = $1) THEN
24 INSERT INTO alior.logi (data_stworzednia, info) values (NOW(), 'Blad');
25 RETURN NULL;
26 END IF;
27
28 RETURN (SELECT COALESCE(SUM(kwota), 0.00) FROM alior.transakcje a_t join alior.rachunki_bankowe a_rb on a_t.nrb = a_rb.nrb WHERE id_klienta = $1);
29END; $$ LANGUAGE plpgsql;
30
31
32
33
34
35
36
37
38
39
40
41
42
43CREATE or REPLACE FUNCTION alior.dodajProwizje() RETURNS trigger
44 LANGUAGE plpgsql
45 AS $$
46BEGIN
47 INSERT INTO alior.transakcje (id_transakcji, nrb, data_czas_transakcji, kwota, rodzaj_operacji) SELECT 1, nrb, NOW(),10.00 + (0.01 * kwota),'prowizja' FROM alior.transakcje a_t join alior.rachunki_bankowe a_rb on a_t.nrb = a_rb.nrb where rodzaj_rachunku = 'oszczednosciowy' and data_zalozenia > (NOW() - INTERVAL '1 year')::date
48 RETURN NEW;
49END
50$$;
51
52CREATE TRIGGER "TR_dodajProwizje"
53BEFORE INSERT ON "alior.transakcje"
54FOR EACH ROW
55WHEN (NEW.rodzaj_operacji = 'wyplata' or NEW.rodzaj_operacji = 'przelew wychodzacy')
56EXECUTE PROCEDURE dodajProwizje();