Oracle Apex sql для календаря, чтобы узнать, сколько увольняется? - PullRequest
0 голосов
/ 20 апреля 2020

Я строю систему управления отпуском в oracle апекс. Итак, мне нужно создать календарь отпусков, который менеджер может просмотреть, чтобы увидеть, какой сотрудник ушел в отпуск на какую дату.

Ниже приведены структуры моей таблицы.

Должен ли я создать другую таблицу дат отпусков или может быть сформирован запрос, который бы показывал сотруднику и дату, когда он ушел? Если да, можете ли вы предложить запрос?

Ответы [ 2 ]

0 голосов
/ 22 апреля 2020

Я рекомендую вам создать триггер (или, что еще лучше, API на основе пакета PL / SQL), чтобы при внесении изменений в таблицу EMP_LEAVE_REQUEST вы записывали выходные дни в другую таблицу, что-то вроде EMP_LEAVE_REQUEST_DAYS. Это может занять различные бизнес-логики c, такие как праздники, выходные и др. c. в учетную запись. Тогда вы вместо этого выполняете запросы для выходных для этой таблицы.

Вот базовый c пример ... С учетом этих таблиц:

create table requests (
    id                             number generated by default on null as identity  
                                  constraint requests_id_pk primary key,
    from_date                      date,
    to_date                        date
);

create table request_dates (
    id                             number generated by default on null as identity  
                                  constraint request_dates_id_pk primary key,
    request_id                     number
                                  constraint request_dates_request_id_fk
                                  references requests on delete cascade,
    request_date                   date
);

Вы можете использовать триггер как это:

create or replace trigger biu_request_trg
  after insert or update on requests
  for each row
declare
  l_days number;
begin
  delete from request_dates
  where request_id = :new.id;

  l_days := :new.to_date - :new.from_date;

  for x in 0 .. l_days - 1
  loop
    insert into request_dates (
      request_id,
      request_date
    ) values (
      :new.id,
      :new.from_date + x
    );
  end loop;
end;
/

Если вы запустили эту вставку сегодня (2020/04/22):

insert into requests (
  from_date,
  to_date
) values (
  trunc(sysdate),
  trunc(sysdate+5)
);

Вы получите эти строки в request_dates:

1   1   04/22/2020
2   1   04/23/2020
3   1   04/24/2020
4   1   04/25/2020
5   1   04/26/2020
0 голосов
/ 21 апреля 2020

Вы можете создать таблицу DATES со всеми датами календаря в ней. Тем не менее, вы можете создать представление с именем DATES, которое делает то же самое, как это:

create view dates as
with ints as
(select rownum i from dual connect by level < 10000)
select date '2017-12-31' + i dt 
from ints;

, которое создает список из 10000 дат, начиная с 2018-01-01 и заканчивая 2045-05-17.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...