基于 Oracle APEX 项值更新和插入
Update and Insert based on Oracle APEX item value
我有一个更新 table(SAMPLE_TAB) 的 APEX 页面。此 table 有多个列(ID、BADGEID、USERID、NAME、CITY、ZIP、EFTDT、TERMDT、STATUS)ID 是记录的不同编号。
BADGEID 和 USERID 是相关的,如果其中一个记录被更改,它应该自动创建新记录并使旧记录失效。
如果 NAME、CITY 或 ZIP 发生变化,则应进行记录更新。
例如:见下文table
ID BADGEID USERID NAME CITY ZIP EFFDT TERMDT STATUS
1 2345 54623 XYZ NY 00000 8/31/2020 12/31/2199 活动
2 5678 90876 DEF NJ 00001 8/31/2020 12/31/2199 活跃
如果在 2020 年 9 月 1 日将同一用户 ID(54623) 的 BADGEID 2345 更改为 2354,则应该有
新记录如下
3 2354 54623 XYZ NY 00000 09/01/2020 12/31/2199 活跃
并将旧记录更新到以下
1 2345 54623 XYZ NY 00000 8/31/2020 09/01/2020 不活动
我在更新处理中尝试了以下 PL/SQL 代码,但出现错误
声明
ID_PARM = (SELECT 来自 SAMPLE_TAB 的徽章 ID = :P1_ID)
开始
如果 (:P1_BADGEID = ID_PARM) 那么
更新 .......
别的
插入和更新
我相信您正在寻找这样的东西。在“...”中填写额外的 columns/page items/conditions:
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;
我有一个更新 table(SAMPLE_TAB) 的 APEX 页面。此 table 有多个列(ID、BADGEID、USERID、NAME、CITY、ZIP、EFTDT、TERMDT、STATUS)ID 是记录的不同编号。
BADGEID 和 USERID 是相关的,如果其中一个记录被更改,它应该自动创建新记录并使旧记录失效。
如果 NAME、CITY 或 ZIP 发生变化,则应进行记录更新。
例如:见下文table
ID BADGEID USERID NAME CITY ZIP EFFDT TERMDT STATUS
1 2345 54623 XYZ NY 00000 8/31/2020 12/31/2199 活动
2 5678 90876 DEF NJ 00001 8/31/2020 12/31/2199 活跃
如果在 2020 年 9 月 1 日将同一用户 ID(54623) 的 BADGEID 2345 更改为 2354,则应该有 新记录如下
3 2354 54623 XYZ NY 00000 09/01/2020 12/31/2199 活跃
并将旧记录更新到以下
1 2345 54623 XYZ NY 00000 8/31/2020 09/01/2020 不活动
我在更新处理中尝试了以下 PL/SQL 代码,但出现错误
声明 ID_PARM = (SELECT 来自 SAMPLE_TAB 的徽章 ID = :P1_ID)
开始 如果 (:P1_BADGEID = ID_PARM) 那么 更新 ....... 别的 插入和更新
我相信您正在寻找这样的东西。在“...”中填写额外的 columns/page items/conditions:
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;