reboot rep

This commit is contained in:
ada-dmitry
2024-02-15 15:29:30 +03:00
parent 2360cb388f
commit 4623603411
25 changed files with 505 additions and 99 deletions
+104
View File
@@ -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');
View File
+1
View File
@@ -0,0 +1 @@
SELECT name FROM departments
+32
View File
@@ -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;
+30
View File
@@ -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;