Обновление и вставка на основе значения элемента 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;