mirror of
https://github.com/ada-dmitry/DB.mephi_ada.git
synced 2026-09-24 08:00:16 +00:00
reboot rep
This commit is contained in:
@@ -0,0 +1,104 @@
|
||||
-- Task 1 --
|
||||
|
||||
CREATE OR REPLACE PROCEDURE molodec() AS $$
|
||||
DECLARE
|
||||
name1 varchar := 'Julia';
|
||||
name2 varchar := 'Пустотааа';
|
||||
BEGIN
|
||||
RAISE INFO ' %, %, вы молодцы! ', name1, name2;
|
||||
|
||||
END $$ LANGUAGE plpgsql;
|
||||
CALL molodec();
|
||||
|
||||
-- Task 2 --
|
||||
|
||||
CREATE OR REPLACE PROCEDURE fiiiizika() AS $$
|
||||
DECLARE
|
||||
velocity_kmh NUMERIC := 60;
|
||||
time_seconds NUMERIC := 30;
|
||||
velocity_ms NUMERIC;
|
||||
distance_m NUMERIC;
|
||||
train_length_m NUMERIC;
|
||||
BEGIN
|
||||
|
||||
velocity_ms := velocity_kmh * 1000 / 3600;
|
||||
|
||||
distance_m := velocity_ms * time_seconds;
|
||||
train_length_m := distance_m;
|
||||
|
||||
RAISE INFO ' % ', TRUNC(train_length_m);
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;
|
||||
CALL fiiiizika();
|
||||
|
||||
|
||||
|
||||
-- Task 3 --
|
||||
|
||||
CREATE OR REPLACE PROCEDURE show_city_streets() AS $$
|
||||
DECLARE
|
||||
city_record RECORD;
|
||||
BEGIN
|
||||
FOR city_record IN SELECT city, street_address FROM locations
|
||||
LOOP
|
||||
RAISE NOTICE 'В городе % есть улица %',
|
||||
city_record.city, city_record.street_address;
|
||||
END LOOP;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;
|
||||
|
||||
CALL show_city_streets();
|
||||
|
||||
|
||||
-- Task 4 --
|
||||
|
||||
CREATE OR REPLACE PROCEDURE factorial(n INTEGER) AS $$
|
||||
DECLARE
|
||||
result INTEGER := 1;
|
||||
i INTEGER := 1;
|
||||
BEGIN
|
||||
WHILE i <= n LOOP
|
||||
result := result * i;
|
||||
i := i + 1;
|
||||
END LOOP;
|
||||
RAISE INFO ' % ', result;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;
|
||||
|
||||
CALL factorial(10);
|
||||
|
||||
-- Task 5 --
|
||||
|
||||
CREATE OR REPLACE FUNCTION get_employees_and_managers_names()
|
||||
RETURNS TABLE (employee_name TEXT, manager_name TEXT) AS $$
|
||||
BEGIN
|
||||
RETURN QUERY
|
||||
SELECT e.first_name || ' ' || e.last_name AS employee_name,
|
||||
COALESCE(m.first_name || ' ' || m.last_name, 'No manager') AS manager_name
|
||||
FROM employees e
|
||||
LEFT JOIN employees m ON e.manager_id = m.employee_id;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;
|
||||
|
||||
SELECT get_employees_and_managers_names();
|
||||
|
||||
-- Task 6 --
|
||||
|
||||
CREATE OR REPLACE FUNCTION binary_to_decimal(binary_num VARCHAR)
|
||||
RETURNS NUMERIC AS $$
|
||||
DECLARE
|
||||
decimal_num NUMERIC := 0;
|
||||
power NUMERIC := 0;
|
||||
bit NUMERIC;
|
||||
BEGIN
|
||||
FOR i IN REVERSE 1..LENGTH(binary_num) LOOP
|
||||
bit := CAST(SUBSTRING(binary_num FROM i FOR 1) AS NUMERIC);
|
||||
decimal_num := decimal_num + (bit * (2 ^ power));
|
||||
power := power + 1;
|
||||
END LOOP;
|
||||
RETURN decimal_num;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;
|
||||
|
||||
SELECT binary_to_decimal('101');
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
SELECT name FROM departments
|
||||
@@ -0,0 +1,32 @@
|
||||
DROP TABLE IF EXISTS professors;
|
||||
|
||||
CREATE table professors(
|
||||
id integer PRIMARY KEY,
|
||||
first_name varchar(20) NOT NULL,
|
||||
last_name varchar(20) NOT NULL,
|
||||
sec_name varchar(20),
|
||||
salary integer CHECK(salary <= 900000) NOT NULL,
|
||||
subj varchar(20) default 'Общая практика',
|
||||
work_exp integer CHECK(work_exp >= 0),
|
||||
dep varchar(2)
|
||||
);
|
||||
|
||||
INSERT into professors VALUES
|
||||
(1, 'Rob', 'Ivanov', 'Ivanovich', 34000, default, 3, '75'),
|
||||
(2, 'Vasiliy', 'Vasilyev', 'Vasilyevich', 874000, 'TMP', 12, 42),
|
||||
(3, 'Сергей', 'Егоров', 'Артемьевич', 37879, default, 2, 33),
|
||||
(4, 'Егор', 'Медведев', 'Кириллович', 34000, default, 3, '75'),
|
||||
(5, 'Андрей', 'Смирнов', ' Александрович', 554000, 'TMP', 6, 72),
|
||||
(6, 'Андрей', 'Егоров', 'Артемьевич', 37879, default, 2, 83),
|
||||
(7, 'Rob', 'Ivanov', 'Ivanovich', 34000, default, 6, '75'),
|
||||
(8, 'Vasiliy', 'Vasilyev', 'Vasilyevich', 874000, 'TMP', 12, 49),
|
||||
(9, 'Петр', 'Сергеев', 'Артемьевич', 349583, default, 3, 43),
|
||||
(10, 'Егор', 'Вакутагин', 'Артемьевич', 35669, default, 2, 33);
|
||||
|
||||
|
||||
/*SELECT last_name, first_name FROM professors;*/
|
||||
SELECT first_name, last_name AS last_name, first_name FROM professors;
|
||||
|
||||
DROP table professors;
|
||||
|
||||
SELECT * FROM professors;
|
||||
@@ -0,0 +1,30 @@
|
||||
CREATE table students(
|
||||
id integer primary key,
|
||||
f_name varchar(20) NOT NULL,
|
||||
l_name varchar(20) NOT NULL,
|
||||
age integer CHECK(age >= 18) NOT NULL,
|
||||
grp char(7) NOT NULL,
|
||||
code_spec char(8)
|
||||
);
|
||||
|
||||
INSERT into students VALUES
|
||||
(1, 'Vasya', 'Pupkin', 20, 'C21-712', '10.05.04'),
|
||||
(2, 'Vasya', 'Pupkin', 20, 'C21-712', '10.05.04'),
|
||||
(3, 'Ivan', 'Ivanov', 30, 'A12-456', '15.06.11'),
|
||||
(4, 'Sasha', 'Smirnova', 19, 'C12-987', '11.07.08'),
|
||||
(5, 'Natasha', 'Nikitina', 28, 'D21-654', '03.03.10'),
|
||||
(6, 'Nikita', 'Orlov', 23, 'E11-345', '19.08.05'),
|
||||
(7, 'Olga', 'Petrova', 22, 'F22-876', '22.05.12'),
|
||||
(8, 'Elena', 'Efimova', 33, 'G11-234', '13.09.01');
|
||||
|
||||
/*SELECT f_name AS l_name, l_name AS f_name, age AS grp, grp AS age,code_spec
|
||||
FROM students;*/
|
||||
|
||||
ALTER TABLE students ADD gender char(1);
|
||||
|
||||
ALTER TABLE students ADD CONSTRAINT gender SET UNIQUE;
|
||||
|
||||
INSERT into students VALUES
|
||||
(1, 'Vasya', 'Pupkin', 20, 'C21-712', '10.05.04', 'm');
|
||||
|
||||
SELECT * FROM students;
|
||||
Reference in New Issue
Block a user