mirror of
https://github.com/ada-dmitry/DB.mephi_ada.git
synced 2026-09-24 08:00:16 +00:00
6lab_DONE!
This commit is contained in:
+34
-23
@@ -50,6 +50,7 @@ FOR employee_rec IN (
|
||||
SELECT last_name, first_name, salary_in_euro
|
||||
FROM bd6_employees
|
||||
ORDER BY salary_in_euro)
|
||||
|
||||
LOOP
|
||||
current_salary := employee_rec.salary_in_euro;
|
||||
|
||||
@@ -74,32 +75,42 @@ CALL print_employees();
|
||||
большой заработной платой. 2-я с конца заработная плата должна добавиться
|
||||
к человеку со второй по размеру заработной платой и т.д. */
|
||||
|
||||
CREATE OR REPLACE PROCEDURE update_salary() AS $$
|
||||
CREATE OR REPLACE FUNCTION rearrange_salaries() RETURNS VOID AS $$
|
||||
DECLARE
|
||||
emp_record bd6_employees%ROWTYPE;
|
||||
counter integer := 0;
|
||||
min_salary bd6_employees.salary_in_euro%TYPE;
|
||||
max_salary bd6_employees.salary_in_euro%TYPE;
|
||||
salaries RECORD;
|
||||
small NUMERIC[];
|
||||
larg NUMERIC[];
|
||||
const CONSTANT INTEGER = 10;
|
||||
BEGIN
|
||||
SELECT MIN(salary_in_euro), MAX(salary_in_euro) INTO min_salary, max_salary FROM bd6_employees;
|
||||
|
||||
FOR emp_record IN
|
||||
SELECT * FROM (SELECT * FROM bd6_employees ORDER BY salary_in_euro LIMIT 3) AS min_salaries
|
||||
LOOP
|
||||
FOR salaries IN
|
||||
SELECT id, salary_in_euro
|
||||
FROM bd6_employees
|
||||
ORDER BY salary_in_euro
|
||||
LIMIT const
|
||||
LOOP
|
||||
small = array_append(small, (SELECT salary_in_euro FROM bd6_employees WHERE id = salaries.id));
|
||||
DELETE FROM bd6_employees
|
||||
WHERE id = salaries.id;
|
||||
END LOOP;
|
||||
|
||||
DELETE FROM bd6_employees WHERE id = emp_record.id;
|
||||
counter := counter + 1;
|
||||
END LOOP;
|
||||
FOR emp_record IN
|
||||
SELECT * FROM (SELECT * FROM bd6_employees ORDER BY salary_in_euro DESC LIMIT 3) AS max_salaries
|
||||
LOOP
|
||||
UPDATE bd6_employees SET salary_in_euro = salary_in_euro + min_salary WHERE id = emp_record.id;
|
||||
counter := counter + 1;
|
||||
END LOOP;
|
||||
|
||||
RAISE NOTICE 'Successfully updated % bd6_employees.', counter;
|
||||
END $$ LANGUAGE plpgsql;
|
||||
CALL update_salary();
|
||||
FOR salaries IN
|
||||
SELECT id, salary_in_euro
|
||||
FROM bd6_employees
|
||||
ORDER BY salary_in_euro DESC
|
||||
LIMIT const
|
||||
LOOP
|
||||
larg = array_append(larg, (SELECT id FROM bd6_employees WHERE id = salaries.id));
|
||||
END LOOP;
|
||||
|
||||
FOR i IN 1..const
|
||||
LOOP
|
||||
UPDATE bd6_employees
|
||||
SET salary_in_euro = salary_in_euro + small[i]
|
||||
WHERE id = larg[i];
|
||||
END LOOP;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;
|
||||
SELECT rearrange_salaries();
|
||||
|
||||
-- Task 4 --
|
||||
/* Создайте таблицу spiral с 5 полями f1, f2, f3, f4, f5 – целые числа.
|
||||
|
||||
Reference in New Issue
Block a user