Проверьте, не находится ли дата ввода между date1 и date2 в первой строке до последней строки plsql - PullRequest
0 голосов
/ 05 февраля 2020

Я пытаюсь создать процедуру для вставки новой start_date в мою таблицу, но я хочу, чтобы она не находилась между date1 и date2 от первой строки до последней строки. это означает, что я хочу сравнить новую дату вставки от первой строки до последней строки, если это не так, а затем вставить в таблицу. как я могу это проверить, пожалуйста, кто-нибудь знает, скажите мне.

мое имя таблицы resister

, и это моя таблица

enter image description here

Ответы [ 2 ]

0 голосов
/ 05 февраля 2020

Как я вижу из данных следующий диапазон дат всегда продолжает предыдущий. Таким образом, вы можете просто проверить, больше ли новый start_date, чем max (end_date). Например:

create or replace procedure insert_date(p_start_date date, p_end_date date)
is
  l_min_date date;
  l_max_date date;
begin
  select min(start_date), max(end_date) 
    into l_min_date, l_max_date
    from registers;

  if (p_start_date > l_max_date) and (p_end_date > p_start_date) then
    insert into registers(start_date, end_date) values(p_start_date, p_end_date);
  end if;
end;

Если пользователь может ввести дату в прошлом (например, 01.01.1980 - 31.01.1980), тогда предложение "if" будет выглядеть как это

... if (p_start_date > l_max_date or p_end_date < l_min_date) and (p_end_date > p_start_date) then ...
0 голосов
/ 05 февраля 2020

Вы можете воспользоваться NOT EXISTS следующим образом:

SELECT &&NEW_INPUT_DATE
  FROM DUAL
 WHERE NOT EXISTS 
    (SELECT 1 
       FROM RESISTER
      WHERE &&NEW_INPUT_DATE BETWEEN START_DATE AND END_DATE)

Cheers !!

...