gpt4 book ai didi

oracle11g - 在插入之前触发删除记录

转载 作者:行者123 更新时间:2023-12-03 07:57:33 24 4
gpt4 key购买 nike

我有一个有 4 列的表格

1.msisdn
2.accountnumber
3.cardnumber
4.subscriptiondate

我想给这个表添加一个触发器。如果我插入的数据是

1.99999999
2.2
3.3298572857239
4.(this can be blank)

而当前表中的数据是

1.99999999
2.1
3.3298572857239
4.(this can be blank)

触发器应该检查是否有这个 msisdn 99999999 已经有这个卡号 3298572857239 的记录。如果表中已存在记录,则触发器应删除现有条目并插入新条目。最终的结果应该是这样的

1.99999999
2.1
3.3298572857239
4.(this can be blank)

我想在触发器前后保持帐号的值相同。这是我到目前为止尝试过的,但是对于这个触发器,我没有在 accountnumber 列中获取任何数据。请有人帮忙

DROP TRIGGER TRIG_TABLEA;

CREATE OR REPLACE TRIGGER TRIG_TABLEA
BEFORE INSERT ON TABLEA
REFERENCING OLD AS Old NEW AS New
FOR EACH ROW
BEGIN
:new.accountnumber := :old.accountnumber;
DELETE FROM TABLEA WHERE MSISDN = :new.MSISDN AND CARDNUMBER = :new.CARDNUMBER;
:new.MSISDN := :new.MSISDN;
:new.CARDNUMBER := :new.CARDNUMBER;
:new.accountnumber := :old.accountnumber;
END;
/

最佳答案

不要进行删除和插入操作。你想要 MERGE。您的报表中唯一可以更改的是帐号和订阅日期。你没有说数据来自哪里,所以我假设这是一个以 p_* 作为参数的 PL/SQL 过程。所以你想要这样的东西:

MERGE INTO mytable trg
USING ( SELECT p_accountnumber, p_subscriptiondate FROM dual ) src
ON ( trg.msisdn = p_msisdn AND trg.cardnumber )
WHEN NOT MATCHED INSERT ( msisdn, accountnumber, cardnumber, subscriptiondate )
VALUES ( p_msisdn, p_accountnumber, p_cardnumber, p_subscriptiondate )
WHEN MATCHED SET ( cardnumber = p_cardnumber, subscriptiondate = p_subscriptiondate)

如果行不存在,这将执行插入操作;如果存在,则更新现有行。

关于oracle11g - 在插入之前触发删除记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44335510/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com