- •1. Пояснення до тексту пояснювальної записки
- •1. Постановка задачі до курсової роботи
- •2. Теоретична частина (короткий опис візуальних та програмних засобів PostfreSql)
- •1.2. Поради щодо складання тексту пояснювальної записки
- •2. Варіанти задач курсової роботи
- •Варіант 2 Реалізація продукції хлібозаводу
- •Варіант 3 Нафтогазоносні родовища України
- •Варіант 4 Розміри газонафтоносних родовищ України
- •Варіант 5 Газосховища України
- •Варіант 6 Нафтобази України
- •Варіант 7 Транспортування газу по території України
- •Варіант 8 Забезпеченість України паливно-мастильними матеріалами
- •Варіант 9 Видобування нафти на Україні
- •Варіант 10 Запаси нафти на родовищах України
- •Варіант 11 Зміни запасів нафти в родовищах України
- •Варіант 12 Гiдрохiмiчний стан поверхневих вод
- •Варіант 13 Реалізація продукції хлібозаводу
- •Варіант 14 Облік відвідування занять студентами вузу
- •Варіант 15 Газосховища України
- •Варіант 16 Вміст нафтопродуктів у нафтобазах України
- •Варіант 17 Забезпеченість паливно-мастильними матеріалами
- •Варіант 18 Добовий видобуток нафти на Україні
- •Варіант 19 Кадровий облік працівників фірми
- •Варіант 20 Дані про туристичну фірму (даний варіант розглянути в прикладі)
- •Варіант 21 Продажа товарів торгівельною фірмою
- •Варіант 22 Продажа фірмою виробів із сої
- •Варіант 23 Виготовлення продукції підприємствами виробничого об’єднання
- •Варіант 24 Малий бізнес
- •Варіант 25 Книжковий магазин
- •Варіант 26 Заклади освіти
- •Варіант 27 Науково-технічна література бібліотеки
- •Напрям: код напряму, напрям;
- •Варіант 28 Транспортні підприємства
- •Варіант 29 Автомобілі
- •Варіант 30 Підприємства-банкрути
- •Завдання
- •Дата видачі завдання 02.09.2013 р.
- •Календарний план
- •1. Вступ
- •2 Коротка історія postgresql
- •2.1 Проект postgres його заснування та розробка
- •3 Основні концепції роботи з postgresql
- •3.1 Створення таблиць
- •3.1.1 Типи даних
- •3.2 Внесення даних у таблицю
- •Insert into ім’я_таблиці [(список_імен_полів)] values (значення1, значення2, …, значення n);
- •3.3 Редагування таблиць
- •Alter table ім’я_таблиці owner то новий_власник
- •3.4 Обмеження
- •Immediate – всі або конкретне обмеження перевіряються наприкінці кожної команди.
- •3.5 Послідовності
- •Drop sequence перелік_послідовностей
- •3.6 Запити
- •3.7 Об'єднання таблиць (Join)
- •3.8 Агрегатні функції
- •3.9 Курсори sql
- •4 Основні елементи мови plpgsql
- •4.1 Структура мови, функції користувача
- •4.2 Розгалуження, цикли, масиви
- •4.3 Курсори
- •5. Практична частина Завдання в-20
- •5.1 Завдання 1
- •Результати виконання:
- •5.2 Завдання 2
- •Розв'язок задачі
- •Задача 8.
- •Розв'язок задачі
- •Результати запиту:
- •5.4 Завдання 4
- •Розв'язок задачі
- •Результат задачі
- •Задача 6,9
- •Розв’язок задачі
- •Результат задачі:
- •6. Висновки
- •7. Список використаної літератури
- •Рекомендована література
Задача 8.
Виготовити запит з відомостями про путівки фірми. Забезпечити відповідний напис для зимових путівок, тобто там, де дата початку маршруту припадає на місяці від грудня до лютого включно.
Розв'язок задачі
SELECT *, CASE WHEN extract( month from oblik_realizaciy.data) = 12 OR extract( month from oblik_realizaciy.data) = 1 OR
extract( month from oblik_realizaciy.data) = 2 THEN 'Зимові путівки!' END AS zima FROM oblik_realizaciy
INNER JOIN marshrut ON marshrut.nom=oblik_realizaciy.nom
INNER JOIN prozgyvannya ON marshrut.k_u_p = prozgyvannya.k_u_p
INNER JOIN harchuvannya ON marshrut.k_u_h = harchuvannya.k_u_h
WHERE extract (month from oblik_realizaciy.data) = 12 OR extract( month from oblik_realizaciy.data) = 1 OR
extract( month from oblik_realizaciy.data) = 2;
Результати запиту:
5.4 Завдання 4
Виготовити звіт про розподіл кількості путівок з певними умовами проживання по умовах харчування. Навпроти умов проживання встановити кількість путівок для кожного виду харчування. Передбачити підсумки по вертикалі і по горизонталі.
Розв'язок задачі
CREATE OR REPLACE FUNCTION zvit() RETURNS text AS
$$
DECLARE
--оголошення запису
rec RECORD;
--оголошення змінної
kod_u_p prozgyvannya.k_u_p %TYPE = 0;
all_text text := ' ';
BEGIN
all_text:=repeat(' ', 20)||'Звіт'||E'\n';
FOR rec IN SELECT marshrut.kil_p, marshrut.k_u_p AS m_k_u_p, marshrut.k_u_h AS m_k_u_h,
prozgyvannya.k_u_p AS p_k_u_p, harchuvannya.k_u_h AS h_k_u_h,
prozgyvannya.u_p, harchuvannya.u_h FROM marshrut
INNER JOIN prozgyvannya ON marshrut.k_u_p = prozgyvannya.k_u_p
INNER JOIN harchuvannya ON marshrut.k_u_h = harchuvannya.k_u_h
ORDER BY marshrut.k_u_p
LOOP
IF kod_u_p <> rec.m_k_u_p
THEN
all_text := all_text||rec.u_p||E':\n'||repeat(' ',5)||rpad(rec.u_h,30, '-')||TO_CHAR(rec.kil_p, '99')||E'\n';
ELSE
all_text := all_text||repeat(' ',5)||rpad(rec.u_h,30, '-')||TO_CHAR(rec.kil_p, '99')||E'\n';
END IF;
kod_u_p := rec.m_k_u_p;
END LOOP;
RETURN all_text;
END;
$$
language plpgsql;
select zvit();
Результат задачі
Задача 6,9
Виготовити звіт про “гарячі“ путівки, тобто такі, що ще незакуплені, а до початку маршруту залишилося менше 6 днів. У звіт включити дані про номер і назву маршруту, ціну за одну путівку та кількість путівок, які ще залишилися. До заголовка звіту додати слова “станом на ” і встановити поточну дату.
Скласти програму для видачі звіту за умовою цього завдання, використати курсор.
Розв’язок задачі
CREATE OR REPLACE FUNCTION zvit() RETURNS text AS
$$
DECLARE
--оголошення змінних, масиву, курсору
nomer marshrut.nom %TYPE; imya marshrut.name %TYPE; cina marshrut.cina %TYPE;
den INTEGER; mis INTEGER; rik INTEGER; ms CHARACTER(9) ARRAY[12];
slovo text; sum_1 marshrut.kil_p %TYPE;
kursor CURSOR FOR SELECT marshrut.nom, marshrut.name, marshrut.cina , sum(marshrut.kil_p-oblik_realizaciy.kil_p_p) AS sum FROM oblik_realizaciy
INNER JOIN marshrut ON (marshrut.nom=oblik_realizaciy.nom)
WHERE extract(day FROM data)< extract(day FROM current_date) + 6
AND extract (month FROM data)=extract (month FROM current_date)
AND extract (year FROM data)=extract (year FROM current_date)
GROUP BY marshrut.nom,marshrut.name,marshrut.cina
ORDER BY name;
BEGIN
--заповнення масиву даними
den:=EXTRACT(DAY FROM CURRENT_DATE);
mis:=EXTRACT(MONTH FROM CURRENT_DATE);
rik:=EXTRACT(YEAR FROM CURRENT_DATE);
ms[1]:='січня';ms[2]:='лютого';ms[3]:='березня';ms[4]:='квітня';ms[5]:='травня';ms[6]:='червня';
ms[7]:='липня';ms[8]:='серпня';ms[9]:='вересня';ms[10]:='жовтня';ms[11]:='листопада';ms[12]:='грудня';
SELECT INTO nomer nom, marshrut.cina cina FROM marshrut;
slovo:=' Звіт'||E'\n';
slovo:=slovo ||'про "гарячі" путівки, що ще не закуплені, а до початку маршруту залишилося менше 6 днів'||E'\n';
slovo:=slovo ||' станом на: '||TO_CHAR(den,'99')||' '||ms[mis]||' '|| TO_CHAR(rik,'9999')||E'\n\n';
slovo:=slovo ||' Номер'||' '||' Путівка'||' '||'Ціна за 1 путівку:'||' '||'Кількість'||E'\n';
slovo:=slovo ||' ---------------------------------------------------------------------------'||E'\n';
open kursor;
LOOP
FETCH kursor INTO nomer,imya,cina,sum_1;
exit when not found;
slovo:=slovo ||' '||nomer||' '||rpad(imya,30,' ')||cina||' '||TO_CHAR(sum_1,'9')||E'\n';
END LOOP;
CLOSE kursor;
RETURN slovo;
END;
$$
language plpgsql;
select zvit();
