sql - 在触发器之前运行一次以插入多行 PL/SQL
问题描述
我有一些参数化表,我需要通过两列 VALID_FROM 和 VALID_TO 添加历史版本。在插入行之前,我有两个前提条件:
1) 表中的每条记录在 VALID_TO (sysday - 1) 列中获取新值
2) 如果表中存在一些与 sysdate (DD.MM.YYYY) 具有相同日期的记录,则必须删除它们。
插入行之前的表
columnA VALID_FROM VALID_TO
row1 1.1.2016 31.12.2999
row2 1.1.2016 31.12.2999
row3 3.1.2016 31.12.2999
插入行后的表
columnA VALID_FROM VALID_TO
row1 1.1.2016 24.6.2018
row2 1.1.2016 24.6.2018
row3 3.1.2016 24.6.2018
row1 25.6.2018 31.12.2999
row2 25.6.2018 31.12.2999
row3 25.6.2018 31.12.2999
row4 25.6.2018 31.12.2999
这两个步骤应该在插入新行之前完成,并且应该是自动的。这是我收到的任务的分配。我不能改变它。
我尝试使用全局临时表创建 before insert 触发器以避免 or 变异错误,但它不起作用,因为每个插入的行都被删除并且 VALID_FROM 和 VALID to 列中的日期也不正确。所以我只需要检查一次表中的旧记录,然后插入所有行而不检查
我的代码:
CREATE OR REPLACE TRIGGER CHANGE_DATE_PARM_TABLE_MUT2
after INSERT on TMP_GR_PARM_IDP_IC_CUST
FOR each ROW
BEGIN
--if exists record which have todas date, then delete
delete from GR_PARM_IDP_IC_CUST1 where DT_VALID_FROM = get_sysdate;
--change date in VALID_TO for old records
update GR_PARM_IDP_IC_CUST1 a set
DT_VALID_TO = TO_CHAR(SYSDATE - 1, 'DD.MM.YYYY')
where DT_VALID_TO = '31.12.2999';
--insert records from temporary table into normal parametrization table
insert into GR_PARM_IDP_IC_CUST1 values (:new.RELATION, :new.DT_VALID_FROM, :new.DT_VALID_TO);
END;
有可能用触发器解决这个问题吗?如果是,有人可以帮助我吗?
解决方案
不可能通过TRIGGER。
推荐阅读
- angular - ng serve 无法识别 -- Windows 中的端口选项
- google-app-maker - 让 App Maker 尊重多对多关系的顺序
- c - C - malloc 不分配请求的内存
- php - phpunit 代码覆盖率启动会话错误
- javascript - 根据相似值将对象拆分为对象数组
- sql - 选择最好的方法来过滤掉特定的条件
- rxjs - RxJS:即使外部可观察对象没有剩余订阅,延迟的内部可观察对象仍会运行
- vba - 如何获得一个按钮以在 Excel 中完全执行宏?
- visual-studio - 项目文件不完整,在更新的 Visual Studio 2017 上找不到 NETCore.App 2.1
- java - 无法解决::truesdk-0.7-releasePartner