Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
53
Добавлен:
07.08.2013
Размер:
395.62 Кб
Скачать

5.3 Завдання 3

Задача 5

Виготовити запит про розподіл кількості нафтових областей по категоріях. Навпроти назв регіонів і областей установити значення кількості нафтових баз для кожної категорії.

Розвязок задачі

SELECT

oblast.n_obl, region.n_reg, count(baza.kod_b)

FROM

baza INNER JOIN oblast INNER JOIN region

ON region.kod_reg = oblast.kod_reg

ON oblast.kod_obl= baza.kod_obl,

paluvo WHERE paluvo.kod_b = baza.kod_b

GROUP BY region.n_reg, oblast.n_obl;

Результати запиту

5.3 Завдання 3

Задача 8

Виготовити запити з відомостями про всі нафтобази. Забезпечити відповідний напис для баз про ввивіз палива в листопаді. Використовуючи курсори.

Розвязок задачі

begin;

DECLARE

curs CURSOR FOR

SELECT *, CASE WHEN OR extract(month from paluvo.data)=11

THEN 'Вивіз палива!' END AS vuviz FROM paluvo

INNER JOIN baza ON baza.kod_b=paluvo.kod_b

INNER JOIN oblast ON oblast.kod_obl = baza.kod_obl

INNER JOIN region ON region.kod_reg=oblast.kod_reg;

FETCH 13 FROM curs;

5.4 Завдання 4

5.4 Задача 4

Виготовити звіт про розподіл кількості нафтобаз, областей по категоріях. Навпроти назв областей установити назви нафтобаз, розділених пробілом, установити значення кількості нафтобаз у даній області.

Розв'язок задачі

CREATE or REPLACE function zvit4() returns text

AS

$$

DECLARE

rec_o oblast %rowtype;

rec_b baza %rowtype;

rec_r region %rowtype ;

_text text = '';

prev_region region.n_reg %type := '';

prev_b_name baza.n_b %type := '';

_count integer := 0;

BEGIN

FOR rec_r IN SELECT * FROM region ORDER BY region.n_reg

LOOP

FOR rec_o IN SELECT * FROM oblast ORDER BY oblast.n_obl

LOOP

IF rec_r.kod_reg = rec_o.kod_reg

THEN

FOR rec_b IN SELECT * FROM baza

LOOP

IF rec_o.kod_obl = rec_b.kod_obl

THEN

IF rec_r.n_reg != prev_region

THEN

IF rec_b.n_b < prev_b_name

THEN

_text := _text || rpad(rec_o.n_obl, 70, '_') || rec_b.n_b|| E'\n';

END IF;

_count := _count + 1;

ELSE

IF _count > 0

THEN

_text := _text||repeat(' ', 30)||'Кількість баз : '||TO_CHAR(_count, '9')||E'\n';

END IF;

_text := _text||E'\n'||repeat(' ', 30)||' '||rec_r.n_reg||E'\n'||

rpad(rec_o.n_obl, 70, '_')||rec_b.n_b||E'\n';

_count:=1;

END IF;

prev_region := rec_r.n_reg;

prev_b_name := rec_b.n_b;

END IF;

END LOOP;

END IF;

END LOOP;

END LOOP;

_text := _text ||repeat(' ', 30)||'Кількість родовищ : '||TO_CHAR(_count, '9')||E'\n';

return _text;

END;

$$

LANGUAGE plpgsql;

select zvit4();

Результат задачі

5.4 Задача 7

Утворити запит про вартість палива яке є на нафтобазі. Використовуючи курсори.

begin;

DECLARE

curs CURSOR FOR

SELECT oblast.n_obl, baza.n_b, sum(paluvo.kilk_b*10.65+paluvo.kilk_d*6.45+paluvo.kilk_m*2.45),text('грн'),

extract (month FROM data) AS mis, extract (year FROM data) AS rik FROM

paluvo INNER JOIN baza INNER JOIN oblast

ON (oblast.kod_obl=baza.kod_obl)

ON (baza.kod_b=paluvo.kod_b)

GROUP BY oblast.n_obl,baza.n_b, mis, rik

ORDER BY oblast.n_obl;

FETCH 13 FROM curs;

Результат:

Соседние файлы в папке курсовая docx100