Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- T1/2/A
- CREATE OR REPLACE FUNCTION roznosci.piatek(liczba VARCHAR) RETURNS INTEGER AS $dzien$
- DECLARE
- licznik INTEGER := 0;
- data_start VARCHAR :=liczba || '-01-13';
- data_koniec VARCHAR :=liczba || '-12-31';
- data_ogolna_s DATE := cast(data_start as DATE);
- data_ogolna_k DATE := cast(data_koniec as DATE);
- BEGIN
- LOOP
- IF EXTRACT(MONTH FROM data_ogolna_s)<EXTRACT(MONTH FROM data_ogolna_k) THEN
- IF ((SELECT date_part('dow',cast(data_ogolna_s AS DATE))::INTEGER) = 5) THEN
- licznik:=licznik+1;
- END IF;
- data_ogolna_s := data_ogolna_s+cast('1 months' as INTERVAL);
- ELSE
- RETURN licznik;
- END IF;
- END LOOP;
- END;
- $dzien$ LANGUAGE 'plpgsql';
- --T1/2/B
- CREATE OR REPLACE FUNCTION roznosci.lata(liczba VARCHAR) RETURNS INTEGER AS $lataka$
- DECLARE
- licznik INTEGER := 0;
- data_start VARCHAR :='2020-05-01';
- data_koncowa VARCHAR :=data_start::DATE + interval '1 year'*liczba::INTEGER;
- data_ogolna_s DATE := cast(data_start as DATE);
- data_ogolna_k DATE := cast(data_koncowa as DATE);
- BEGIN
- LOOP
- IF EXTRACT(YEAR FROM data_ogolna_s)<=EXTRACT(YEAR FROM data_ogolna_k) THEN
- IF ((SELECT date_part('dow',cast(data_ogolna_s AS DATE))::INTEGER) = 3) THEN
- licznik:=licznik+1;
- END IF;
- data_ogolna_s := data_ogolna_s+cast('1 years' as INTERVAL);
- ELSE
- RETURN licznik;
- END IF;
- END LOOP;
- END;
- $lataka$ LANGUAGE 'plpgsql';
- --T1/2/C
- CREATE OR REPLACE FUNCTION roznosci.stypendium(nr_a VARCHAR) RETURNS FLOAT AS $stypendium$
- DECLARE
- stypendium FLOAT :=0;
- srednia FLOAT :=0;
- BEGIN
- SELECT avg(o.ocena) INTO srednia FROM dziekanat.oceny as o WHERE o.nr_albumu = nr_a;
- IF srednia<=4 THEN
- stypendium=0;
- ELSIF srednia>4 AND srednia<4.5 THEN
- srednia=srednia-4;
- srednia=srednia*100;
- stypendium=srednia*5;
- ELSIF srednia>=4.5 AND srednia<5 THEN
- srednia=srednia-4.5;
- srednia=srednia*100;
- stypendium=250+(srednia*10);
- ELSIF srednia=5.0 THEN
- stypendium=1000;
- END IF;
- RETURN stypendium;
- END;
- $stypendium$ LANGUAGE 'plpgsql';
- --T2/2/A
- CREATE OR REPLACE FUNCTION roznosci.stypendium(nr_a VARCHAR) RETURNS FLOAT AS $stypendium$
- DECLARE
- stypendium FLOAT :=0;
- srednia FLOAT :=0;
- BEGIN
- IF (SELECT COUNT(*) FROM roznosci.stypendia) = 0 THEN
- CREATE TABLE roznosci.stypendia(
- nr_alb VARCHAR(30) UNIQUE NOT NULL,
- data_przyznania DATE NOT NULL,
- wartosc_sty FLOAT NOT NULL);
- ELSE
- SELECT avg(o.ocena) INTO srednia FROM dziekanat.oceny as o WHERE o.nr_albumu = nr_a;
- IF srednia<=4 THEN
- stypendium=0;
- ELSIF srednia>4 AND srednia<4.5 THEN
- srednia=srednia-4;
- srednia=srednia*100;
- stypendium=srednia*5;
- ELSIF srednia>=4.5 AND srednia<5 THEN
- srednia=srednia-4.5;
- srednia=srednia*100;
- stypendium=250+(srednia*10);
- ELSIF srednia=5.0 THEN
- stypendium=1000;
- END IF;
- END IF;
- INSERT INTO roznosci.stypendia(nr_alb, data_przyznania,wartosc_sty)
- VALUES (nr_a, CURRENT_DATE, stypendium);
- RETURN stypendium;
- END;
- $stypendium$ LANGUAGE 'plpgsql';
- --T2/2/B
- CREATE OR REPLACE FUNCTION roznosci.pesel(nr_a VARCHAR) RETURNS BOOLEAN AS $stypendium$
- DECLARE
- pesl VARCHAR :='';
- znak VARCHAR :='';
- kod INTEGER;
- i INTEGER := 1;
- dlugosc INTEGER :=0;
- BEGIN
- SELECT pe.pesel INTO pesl FROM dziekanat.studenci as pe WHERE pe.nr_albumu = nr_a;
- dlugosc := length(pesl);
- LOOP
- znak := substring(pesl, i, 1);
- kod := ascii(znak);
- IF NOT kod BETWEEN ascii('0') AND ascii('9') THEN
- RAISE NOTICE 'Pesel zawiera nieprawidłowy znak: %', znak;
- RETURN FALSE;
- END IF;
- i := i+1;
- IF i > dlugosc THEN
- RETURN TRUE;
- END IF;
- END LOOP;
- END;
- $stypendium$ LANGUAGE 'plpgsql';
Advertisement
Add Comment
Please, Sign In to add comment