/* Решение заданий по PL/SQL Порядин А.В. 13.02.2024
*/
--1)Создание таблицы TBL1
create table TBL1 (
ORG_ID number(19), --Идентификатор
ORG_NAME varchar2(240), --Имя организации
COMMENTS varchar2(240) --Комментарий
);
--2)Вставка данных в таблицу TBL1
insert into TBL1 values (1, 'Работа', '');
insert into TBL1 values (2, 'Загс', '');
insert into TBL1 values (3, 'Университет', '');
insert into TBL1 values (4, 'Магазин', '');
insert into TBL1 values (6, 'Хобби', '');
--3)Создание таблицы TBL2
create table TBL2 (
EVENT_ID number(19), --Идентификатор
EVENT_NAME varchar2(100), --Имя события
EVENT_DATE date, --Дата события
ORG_ID number(19)); --Идентификтаор организации
--4)Создание последовательности EVENT_SEQ с шагом 1, начиная с 1
CREATE SEQUENCE EVENT_SEQ
MINVALUE 1
START WITH 1
INCREMENT BY 1
NOCACHE;
--5)Создание процедуры заполнения таблицы TBL2
CREATE OR REPLACE PROCEDURE FILL_TABLE
(
name_in IN TBL2.EVENT_NAME%TYPE, --входной параметр названия события
date_in IN TBL2.EVENT_DATE%TYPE, --входной параметр даты события
org_in IN TBL2.ORG_ID%TYPE --входной параметр идентифактора организации
)
IS
BEGIN
--Записываем данные в таблицу TBL2
INSERT INTO TBL2 (EVENT_ID, EVENT_NAME, EVENT_DATE, ORG_ID)
VALUES(
EVENT_SEQ.NEXTVAL, --Идентификатор события записывается элементом последовательности
name_in,
date_in,
org_in
);
commit;
END;
--6)Заполняем таблицу TBL2 с помощью процедуры FILL_TABLE
begin
FILL_TABLE('Собеседование',TO_DATE('06.12.2024', 'dd.mm.yyyy'),1);
FILL_TABLE('Диплом', TO_DATE('06.12.2024', 'dd.mm.yyyy'),3);
FILL_TABLE('День рождения',TO_DATE('06.12.2024', 'dd.mm.yyyy'),0);
FILL_TABLE('Новый год',TO_DATE('06.12.2024', 'dd.mm.yyyy'),0);
FILL_TABLE('Выпускной',TO_DATE('06.12.2024', 'dd.mm.yyyy'),3);
FILL_TABLE('Встреча с другом',TO_DATE('06.12.2024', 'dd.mm.yyyy'),5);
FILL_TABLE('Встреча с братом',TO_DATE('06.12.2024', 'dd.mm.yyyy'),5);
FILL_TABLE('Поездка в Москву',TO_DATE('06.12.2024', 'dd.mm.yyyy'),0);
FILL_TABLE('Поход в лес',TO_DATE('06.12.2024', 'dd.mm.yyyy'),6);
FILL_TABLE('Собеседование 2',TO_DATE('06.12.2024', 'dd.mm.yyyy'),1);
end;
insert into TBL2 VALUES (EVENT_SEQ.NEXTVAL,'Собеседование',TO_DATE('06.12.2024', 'dd.mm.yyyy'),1);
insert into TBL2 VALUES (EVENT_SEQ.NEXTVAL,'Диплом', TO_DATE('06.07.2020', 'dd.mm.yyyy'),3);
insert into TBL2 VALUES (EVENT_SEQ.NEXTVAL,'День рождения',TO_DATE('05.03.2024', 'dd.mm.yyyy'),0);
insert into TBL2 VALUES (EVENT_SEQ.NEXTVAL,'Новый год',TO_DATE('01.01.2024', 'dd.mm.yyyy'),0);
insert into TBL2 VALUES (EVENT_SEQ.NEXTVAL,'Выпускной',TO_DATE('31.07.2020', 'dd.mm.yyyy'),3);
insert into TBL2 VALUES (EVENT_SEQ.NEXTVAL,'Встреча с другом',TO_DATE('06.04.2024', 'dd.mm.yyyy'),5);
insert into TBL2 VALUES (EVENT_SEQ.NEXTVAL,'Встреча с братом',TO_DATE('26.03.2024', 'dd.mm.yyyy'),5);
insert into TBL2 VALUES (EVENT_SEQ.NEXTVAL,'Поездка в Москву',TO_DATE('06.05.2024', 'dd.mm.yyyy'),0);
insert into TBL2 VALUES (EVENT_SEQ.NEXTVAL,'Поход в лес',TO_DATE('16.11.2023', 'dd.mm.yyyy'),6);
insert into TBL2 VALUES (EVENT_SEQ.NEXTVAL,'Собеседование 2',TO_DATE('06.11.2024', 'dd.mm.yyyy'),1);
--7)Выводим значения ближайшего события
SELECT EVENT_NAME, EVENT_DATE, max(MIN_DATE)
FROM(
SELECT EVENT_NAME, EVENT_DATE, (current_date - EVENT_DATE) as MIN_DATE
FROM TBL2
WHERE (current_date - EVENT_DATE) < 0
ORDER BY (current_date - EVENT_DATE)
)
GROUP BY EVENT_NAME, EVENT_DATE;
SELECT EVENT_ID, max(MIN_DATE)
FROM (SELECT EVENT_NAME, EVENT_DATE, (current_date - EVENT_DATE) as MIN_DATE, EVENT_ID
FROM TBL2
WHERE (current_date - EVENT_DATE) < 0)
GROUP BY EVENT_ID;