Добавил:
t.me Прошиваю/настраиваю роутеры в общаге МИЭТ, пишите в тг: t.me/aogudugnp Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

отчеты по лабам / СУБД_ЛР6

.docx
Скачиваний:
0
Добавлен:
21.06.2025
Размер:
133.93 Кб
Скачать

Отчет по ЛР № 6

Практическая часть

Задание 1

Напишите запрос по варианту

Условие запроса

3

Напишите скрипт, выводящий количество всех оценок 5, 4, 3, 2 в единой таблице



do

$$

DECLARE

num_of_5 INTEGER;

num_of_4 INTEGER;

num_of_3 INTEGER;

num_of_2 INTEGER;

BEGIN

SELECT COUNT(CASE WHEN mark=5 THEN 1 END)

INTO num_of_5

FROM field_comprehension;

raise notice 'Mark 5: %', num_of_5;

SELECT COUNT(CASE WHEN mark=4 THEN 1 END)

INTO num_of_4

FROM field_comprehension;

raise notice 'Mark 4: %', num_of_4;

SELECT COUNT(CASE WHEN mark=3 THEN 1 END)

INTO num_of_3

FROM field_comprehension;

raise notice 'Mark 3: %', num_of_3;

SELECT COUNT(CASE WHEN mark=2 THEN 1 END)

INTO num_of_2

FROM field_comprehension;

raise notice 'Mark 2: %', num_of_2;

END

$$;

Задание 2

Напишите запрос по варианту

Условие запроса

3

Создайте процедуру добавления нового преподавателя

CREATE PROCEDURE add_proffesor(professor_id bigint, surname char(30), name char(30), patronymic char(30), degree varchar(15), academic_title varchar(40), сurrent_position varchar(40),

experience integer, salary money, phone varchar(30), structural_unit_number integer,

contract_number integer, wage_rate numeric(3,2))

LANGUAGE SQL

AS $$

INSERT INTO professor (professor_id, surname, name, patronymic, degree, academic_title, сurrent_position, experience, salary, phone_number)

VALUES (77777, 'Александр', 'Волков', 'Сергеевич', 'д.т.н.', 'профессор', 'доцент', 10, 500000::money, '8(800)555-35-35');

INSERT INTO employment (structural_unit_number, professor_id, contract_number, wage_rate)

VALUES (1, 77777, 111111, 0.75);

$$;

Задание 3

Напишите запрос по варианту

Условие запроса

3

Сделайте функцию, которая выводит всю информацию о преподавателе по его id

CREATE OR REPLACE FUNCTION find_professor(professor_id bigint) RETURNS table (

professor_id INTEGER,

surname TEXT,

name TEXT,

patronymic TEXT,

degree TEXT,

academic_title TEXT,

Сurrent_position TEXT,

experience INTEGER,

salary MONEY,

phone TEXT

)

LANGUAGE SQL

AS $$

SELECT *

FROM professor

WHERE professor_id = professor_id

$$;

----------------------------

SELECT find_professor(81001)

Задание 4

Напишите запрос по варианту

Условие запроса

3

Создайте процедуру удаления преподавателя

CREATE PROCEDURE del_professor(professor_id_del bigint)

LANGUAGE SQL

AS $$

DELETE FROM employment WHERE professor_id = professor_id_del;

DELETE FROM professor_field WHERE professor_id = professor_id_del;

UPDATE field SET professor_id=81001 WHERE professor_id = professor_id_del;

DELETE FROM professor WHERE professor_id = professor_id_del;

$$;

Задание 5

Напишите запрос по варианту

Условие запроса

3

Создайте триггер, который удаляет всю строчку из базы, если удалить любую его часть.

CREATE OR REPLACE FUNCTION add_to_debtors()

RETURNS TRIGGER

LANGUAGE plpgsql

AS $$

DECLARE

surnameD TEXT;

nameD TEXT;

patronymicD TEXT;

students_group_numberD TEXT;

BEGIN

SELECT surname

INTO surnameD

FROM student

WHERE new.student_id = student_id;

SELECT name

INTO nameD

FROM student

WHERE new.student_id = student_id;

SELECT patronymic

INTO patronymicD

FROM student

WHERE new.student_id = student_id;

SELECT students_group_number

INTO students_group_numberD

FROM student

WHERE new.student_id = student_id;

IF NEW.mark = 2 THEN

INSERT INTO debtor_students (surname, name, patronymic, group_id, debt_subject_id)

VALUES (surnameD, nameD, patronymicD, students_group_numberD, NEW.field);

END IF;

RETURN NEW;

END;

$$;

CREATE TRIGGER add_to_debtors_trigger

AFTER INSERT OR UPDATE ON Field_comprehension

FOR EACH ROW

EXECUTE FUNCTION add_to_debtors();

UPDATE field_comprehension

SET mark = 2

WHERE student_id=838389 and field = '83871d28-6e1b-4f5c-b1f9-5a7a4a63d84b'

Соседние файлы в папке отчеты по лабам