问题描述
嗨,
我是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-新纪录
有什么方法可以在没有触发器的情况下实现这一目标?
我是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-新纪录
有什么方法可以在没有触发器的情况下实现这一目标?
专家解答
我会创建一个看起来像这样的过程:
然后在您的表单提交过程中调用此
开始日期检查是为了避免丢失更新问题,即两个人尝试同时更改同一条记录。
(sql % rowcount可能为零,因为您正在搜索无效的id; 修复此问题是读者的练习;)
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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




