ORACLE Apex валидация - PullRequest
       1

ORACLE Apex валидация

0 голосов
/ 23 мая 2019

У меня есть одна таблица, у меня есть три столбца, start_hour, end_hour и date, в ORACLE Apex у меня есть страница формы с двумя элементами, P00_START_HOUR и P00_END_HOUR, мне нужно создать проверку, чтобы предотвратить вставку в ту же датумежду start_hour и end_hour из таблицы.Например, если в таблице у меня уже есть
|start_hour ||end_hour |
|12:00 ||08:00 PM |
Я не могу вставить значение, которое между этими двумя часами вот так
P00_START_HOUR = 08:00 AM
P00_END_HOUR = 01:00 PM
Я понятия не имею, как это сделать.

1 Ответ

0 голосов
/ 30 мая 2019

Я создал пользовательскую таблицу для этого примера

create table users (
    id                             number generated by default on null as identity  
                                   constraint users_id_pk primary key,
    name                           varchar2(50),
    the_user                       varchar2(20),
    email                          varchar2(30),
    created                        date not null,
    created_by                     varchar2(255) not null,
    updated                        date not null,
    updated_by                     varchar2(255) not null
);


-- triggers
create or replace trigger users_biu
    before insert or update 
    on users
    for each row
begin
    if inserting then
        :new.created := sysdate;
        :new.created_by := nvl(sys_context('APEX$SESSION','APP_USER'),user);
    end if;
    :new.updated := sysdate;
    :new.updated_by := nvl(sys_context('APEX$SESSION','APP_USER'),user);
end users_biu;
/

Когда страница загружена, я вычисляю последнего созданного пользователя

enter image description here

declare
l_user varchar2(30);
begin

    select the_user into l_user
    from users
    order by id desc
    FETCH FIRST 1 ROWS ONLY;

    return l_user;
end;

enter image description here

Создайте проверку, я сравнил с 1 часом, но вы можете использовать свои собственные правила

enter image description here

declare
    l_created_hour varchar2(50);
    l_next_hour varchar2(50);

begin

    select to_char(CREATED,'DD-MM-YYYY hh:mi:ss'),
           to_char(CREATED + 1/24,'DD-MM-YYYY hh:mi:ss') 
           into l_created_hour, l_next_hour
  from USERS
  where the_user = :P3_LAST_USER;

  if l_next_hour >= l_created_hour then
        return false;
  else
        return true;
  end if;

end;

Результат

enter image description here

Скачать приложение

...