如何解决根据Oracle APEX项目值进行更新和插入
我有APEX页面,它会更新表(SAMPLE_TAB)。该表具有多个列(ID,BADGEID,USERID,NAME,CITY,ZIP,EFDTD,TERMDT,STATUS),ID是记录的不同编号。
BADGEID和USERID是相关的,如果更改了一条记录,它将自动创建新记录并使旧记录过期。
如果NAME,CITY或ZIP发生更改,则应该进行记录更新。
例如:请参见下表
ID Badgeid用户名城市CITY EFFDT TERMDT状态
1 2345 54623 XYZ纽约00000 8/31/2020 12/31/2199有效
2 5678 90876 DEF新泽西州00001 8/31/2020 12/31/2199有效
如果对于相同的USERID(54623),BADGEID 2345更改为2354,则在SEP 1 2020上应该有一个 新记录如下
3 2354 54623 XYZ纽约00000 09/01/2020 12/31/2199有效
并将旧记录更新到下面
1 2345 54623 XYZ纽约00000 8/31/2020 09/01/2020不活动
我在更新处理中尝试使用下面的PL / sql代码,但出现错误
声明 ID_PARM =(从SAMPLE_TAB WHERE ID =:P1_ID中选择徽章)
开始 IF(:P1_BADGEID = ID_PARM)然后 更新....... 其他 插入和更新
解决方法
我相信您正在寻找类似的东西。在“ ...”中填写其他列/页面项/条件:
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;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。