暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 插入新记录时自动更新上一个end_date列

ASKTOM 2021-03-18
267

问题描述

嗨,

我是Apex的新手,我想添加一个动态操作,以在插入新记录时自动更新旧的end_date列。这个想法是,对于新记录,无论我们放在start_date中,相同的日期将自动分配给以前的记录end_date。例如

业务名称 | 业务标识 | 城市名称 | 城市标识 | 开始日期 | 结束日期
美国广播公司1000 NY 20 03-10-2021 12/31/9999

当用户为相同的公司名称但具有不同的城市创建另一条记录时,将以前记录的end_date设置为新记录的start_date。

业务名称 | 业务标识 | 城市名称 | 城市标识 | 开始日期 | 结束日期
ABC 1000 NY 20 03-10-2021 03-15-2021-旧记录
ABC 1000 Dalas 30 03-15-2021 12/31/9999-新纪录

有什么方法可以在没有触发器的情况下实现这一目标?

专家解答

我会创建一个看起来像这样的过程:

create or replace procedure insert_rec ( 
  p_id int, latest_start date, ...
) as
  latest_end date;
begin

  update ...
  set    end_date = sysdate
  where  id = p_id
  and    start_date = latest_start
  returning end_date into latest_end;
  
  if sql%rowcount = 0 then
    raise_application_error ( 
      -20001,
      'Row start date mismatch'
    );
  end if;
  
  insert into ... ( id, start_date, ... 
    values ( p_id, latest_end, ... );
  
end insert_rec;
/


然后在您的表单提交过程中调用此

开始日期检查是为了避免丢失更新问题,即两个人尝试同时更改同一条记录。

(sql % rowcount可能为零,因为您正在搜索无效的id; 修复此问题是读者的练习;)
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论