Обновление и вставка на основе значения элемента Oracle APEX

У меня есть страница APEX, которая обновляет таблицу (SAMPLE_TAB). В этой таблице несколько столбцов (ID, BADGEID, USERID, NAME, CITY, ZIP, EFTDT, TERMDT, STATUS) ID - это отдельный номер для записей.

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

Если есть изменение в NAME, CITY или ZIP, то следует обновить запись.

Например: см. Таблицу ниже

ID BADGEID ИМЯ ПОЛЬЗОВАТЕЛЯ ГОРОД ZIP EFFDT TERMDT STATUS

1 2345 54623 XYZ NY 00000 31.08.2020 31.12.2199 Активно

2 5678 90876 DEF NJ 00001 31.08.2020 31.12.2199 Активно

Если BADGEID 2345 изменен на 2354 для того же USERID(54623) 1 СЕНТЯБРЯ 2020 г., то должна появиться новая запись, как показано ниже

3 2354 54623 XYZ NY 00000 01.09.2020 31.12.2199 АКТИВНЫЙ

И обновите старую запись ниже

1 2345 54623 XYZ NY 00000 31.08.2020 09.01.2020 НЕАКТИВНО

Я пробовал под кодом PL/SQL при обработке обновлений, но получаю ошибку

DECLARE ID_PARM = (ВЫБРАТЬ ЗНАЧОК ИЗ SAMPLE_TAB, ГДЕ ID =:P1_ID)

НАЧАТЬ ЕСЛИ (:P1_BADGEID = ID_PARM) ТОГДА ОБНОВИТЬ....... ИНАЧЕ ВСТАВИТЬ и ОБНОВИТЬ

1 ответ

Решение

Я думаю, вы ищете что-то подобное. Заполните "..." дополнительными столбцами / элементами страницы / условиями:

DECLARE
  l_old_row sample_tab%ROWTYPE;
BEGIN
  SELECT * INTO l_old_row FROM sample_tab WHERE id = :P1_ID;
  IF ((l_old_row.badge_id != :P1_BADGE_ID) OR (l_old_row.user_id != :P1_USERID))
  THEN
    UPDATE sample_tab SET status = 'INACTIVE' WHERE id = :P1_ID;
    INSERT INTO sample_tab (badgeid,userid,...) VALUES (:P1_BADGE_ID, :P1_USERID,...);
  ELSIF ((l_old_row.name != :P1_NAME) OR (l_old_row.city != :P1_CITY) OR ...) THEN
    UPDATE sample_tab
       SET name = :P1_NAME,
           city = :P1_CITY,
           ...
     WHERE id = :P1_ID;
  END IF;
END;
Другие вопросы по тегам