【问题标题】:Update and Insert based on Oracle APEX item value根据 Oracle APEX 项目值更新和插入
【发布时间】:2020-08-31 17:18:29
【问题描述】:

我有一个更新表(SAMPLE_TAB)的 APEX 页面。此表有多个列(ID、BADGEID、USERID、NAME、CITY、ZIP、EFTDT、TERMDT、STATUS)ID 是记录的唯一编号。

BADGEID 和 USERID 是相关的,如果其中一条记录发生更改,它应该自动创建新记录并过期旧记录。

如果 NAME、CITY 或 ZIP 发生变化,则应该更新记录。

例如:见下表

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 活跃

如果 BADGEID 2345 在 2020 年 9 月 1 日更改为相同 USERID(54623) 的 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 =(从 SAMPLE_TAB 中选择 BADGEID,其中 ID = :P1_ID)

开始 如果 (:P1_BADGEID = ID_PARM) 那么 更新 ....... 别的 插入和更新

【问题讨论】:

    标签: oracle-apex oracle-apex-19.2


    【解决方案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;
    

    【讨论】:

    • 我在“SELECT * FROM sample_tab INTO l_old_row WHERE id = :P1_ID;”处遇到错误部分 SQL 命令未正确结束。
    • 将 sql 语句更改为下面并且它工作 SELECT * INTO l_old_row FROM sample_tab WHERE id = :P1_ID;"
    • @MHK 谢谢我已经更新了我的答案 - 代码未经测试
    猜你喜欢
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    • 2017-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多